数据结构(线段树):BZOJ 1568 [JSOI2008]Blue Mary开公司
2016-06-13 11:31
471 查看
1568: [JSOI2008]Blue Mary开公司
Time Limit: 15 Sec Memory Limit: 162 MBSubmit: 602 Solved: 214
[Submit][Status][Discuss]
Description
Input
第一行 :一个整数N ,表示方案和询问的总数。 接下来N行,每行开头一个单词“Query”或“Project”。
若单词为Query,则后接一个整数T,表示Blue Mary询问第T天的最大收益。
若单词为Project,则后接两个实数S,P,表示该种设计方案第一天的收益S,以及以后每天比上一天多出的收益P。
Output
对于每一个Query,输出一个整数,表示询问的答案,并精确到整百元(以百元为单位,例如:该天最大收益为210或290时,均应该输出2)。Sample Input
10Project 5.10200 0.65000
Project 2.76200 1.43000
Query 4
Query 2
Project 3.80200 1.17000
Query 2
Query 3
Query 1
Project 4.58200 0.91000
Project 5.36200 0.39000
Sample Output
00
0
0
0
HINT
约定: 1 <= N <= 100000 1 <= T <=50000 0 < P < 100,| S | <= 10^6 提示:本题读写数据量可能相当巨大,请选手注意选择高效的文件读写方式。一种特殊的线段树……
#include <iostream> #include <cstring> #include <cstdio> using namespace std; const int maxn=50010; struct Node{ double a,b; Node(double a_=0.0,double b_=0.0){ a=a_;b=b_; } double Val(int p){ return a*p+b; } int CmP(int l,int r,Node x){ if(Val(l)>=x.Val(l)&&Val(r)>=x.Val(r))return 1; if(Val(l)<=x.Val(l)&&Val(r)<=x.Val(r))return -1; return 0; } }T[maxn<<2]; double Query(int x,int l,int r,int g){ if(l==r)return T[x].Val(l); int mid=(l+r)>>1; double ret=T[x].Val(g); if(mid>=g)return max(ret,Query(x<<1,l,mid,g)); else return max(ret,Query(x<<1|1,mid+1,r,g)); } void Modify(int x,int l,int r,Node p){ int tmp=p.CmP(l,r,T[x]); if(tmp==1)T[x]=p; if(tmp!=0)return; int mid=(l+r)>>1; tmp=p.CmP(l,mid,T[x]); if(tmp!=1&&l!=r)Modify(x<<1,l,mid,T[x]); if(tmp!=-1&&l!=r)Modify(x<<1,l,mid,p); tmp=p.CmP(mid+1,r,T[x]); if(tmp!=1&&l!=r)Modify(x<<1|1,mid+1,r,T[x]); if(tmp!=-1&&l!=r)Modify(x<<1|1,mid+1,r,p); } char op[10]; int main(){ int Q,p,n=50000; double s,t; scanf("%d",&Q); while(Q--){ scanf("%s",op); if(!strcmp(op,"Project")){ scanf("%lf%lf",&s,&t); Modify(1,1,n,Node(t,s-t)); } else{ scanf("%d",&p); printf("%d\n",(int)(Query(1,1,n,p)/100)); } } }
相关文章推荐
- 数据结构第七次试验
- 数据结构(线段树):SPOJ GSS3 - Can you answer these queries III
- thrift数据结构
- 数据结构算法模拟系统
- 多余元素删除之移位算法
- UVA - 1395 - Slim Span(Kruskal算法+枚举)
- 数据结构之二叉树
- 算法导论 第10章 10.3 指针和对象实现
- 算法导论-15-3-编辑距离
- 第16章 贪心算法
- 算法导论 第22章 图算法 22.3 深度优先搜索
- 算法导论-14.3-6-MIN-GAP
- 算法导论 14.1-7 顺序统计树求逆序对 O(nlgn)
- 算法导论-15-4-计划一个公司聚会
- 算法导论-13-1-持久动态集合
- Linux2.6为数据结构分配内存-slab
- 算法导论-15-7-达到最高效益的调度
- 算法导论 第10章 10.4 有根树的表示
- 算法导论 第13章 红黑树
- 算法导论 第7章 快速排序