BZOJ 1568 李超线段树
2017-01-18 09:06
260 查看
思路:
李超线段树裸题
李超线段树裸题
//By SiriusRen #include <cmath> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; #define N 100050 int n,t;char op[10]; struct Tree{double s,p;}tr[N*8]; void insert(int l,int r,int pos,double s,double p){ int mid=(l+r)>>1,lson=pos<<1,rson=pos<<1|1; if(tr[pos].s==0&&tr[pos].p==0){tr[pos].s=s,tr[pos].p=p;return;} double val1=tr[pos].s+(mid-1.0)*tr[pos].p; double val2=s+(mid-1.0)*p; if(l==r){if(val2>val1)tr[pos].s=s,tr[pos].p=p;} else if(tr[pos].p==p)tr[pos].s=max(tr[pos].s,s); else if(tr[pos].p>p){ if(val1>=val2)insert(l,mid,lson,s,p); else insert(mid+1,r,rson,tr[pos].s,tr[pos].p),tr[pos].s=s,tr[pos].p=p; } else{ if(val1>=val2)insert(mid+1,r,rson,s,p); else insert(l,mid,lson,tr[pos].s,tr[pos].p),tr[pos].s=s,tr[pos].p=p; } } double query(int l,int r,int pos,int x){ int mid=(l+r)>>1,lson=pos<<1,rson=pos<<1|1; double ans=max(0.0,tr[pos].s+(x-1.0)*tr[pos].p); if(l==r)return ans; if(x<=mid)ans=max(ans,query(l,mid,lson,x)); else ans=max(ans,query(mid+1,r,rson,x)); return ans; } int main(){ scanf("%d",&n); for(int i=1;i<=n;i++){ scanf("%s",op); if(op[0]=='Q'){ scanf("%d",&t); printf("%d\n",((int)query(1,50000,1,t))/100); } else if(op[0]=='P'){ double s,p; scanf("%lf%lf",&s,&p); insert(1,50000,1,s,p); } } }
相关文章推荐
- [李超线段树 模板题] BZOJ 1568 [JSOI2008]Blue Mary开公司
- 【BZOJ-1568】Blue Mary开公司 李超线段树 (标记永久化)
- 【李超线段树】BZOJ1568[JSOI2008]Blue Mary开公司
- BZOJ-1568: Blue Mary开公司 (李超线段树)
- 【BZOJ1568】【Tyvj3490】Blue Mary开公司 李超线段树
- [bzoj1568]李超线段树模板题(标志永久化)
- BZOJ 1568 李超线段树
- [bzoj1568][JSOI2008]Blue Mary开公司——李超线段树
- 【bzoj1568】【JSOI2008】【Blue Mary开公司】【线段树】
- 【BZOJ 3165】 [Heoi2013]Segment 李超线段树
- 【BZOJ-3165】Segment 李超线段树(标记永久化)
- [李超线段树] BZOJ3165 [Heoi2013]. Segment
- BZOJ 1568 Blue Mary开公司(线段树,标记永久化)
- [树链剖分 李超线段树] BZOJ4515 [Sdoi2016] 游戏
- bzoj1568 [JSOI2008]Blue Mary开公司 标记永久化线段树
- 【李超线段树】BZOJ3165 [Heoi2013]Segment
- [李超线段树] BZOJ 3165: [Heoi2013]Segment
- [ 李超线段树 ] BZOJ3165
- 对空防御的训练 改编自BZOJ3165 (线段树永久化标记 李超线段树)
- BZOJ 3165 李超线段树