[bzoj3064]CPU监控
Posted pywbktda
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[bzoj3064]CPU监控相关的知识,希望对你有一定的参考价值。
首先考虑没有区间历史最大值,用线段树维护每一个区间的一个二元组(x,y),表示区间内所有数先加上x在和y取max,然后就要支持标记的修改和合并
修改:如果对(x,y)修改一个(x‘,y‘),那么就是(x+x‘,max(y+x‘,y‘))
合并:如果将(x1,y1)和(x2,y2)合并,那么就是(max(x1,x2),max(y1,y2))
用这个东西就可以维护区间当前最大值了,那么历史最大值也可用同样的方式,只是不能直接覆盖而是对其取max即可
1 #include<bits/stdc++.h> 2 using namespace std; 3 #define N 100005 4 #define oo 0x3f3f3f3f 5 #define L (k<<1) 6 #define R (L+1) 7 #define mid (l+r>>1) 8 struct ji 9 int a,b; 10 laz[N<<2],f[N<<2]; 11 int n,m,x,y,z,mx[N<<2][2]; 12 char s[11]; 13 ji max(ji x,ji y) 14 return jimax(x.a,y.a),max(x.b,y.b); 15 16 ji jia(ji x,ji y) 17 return jimax(-oo,x.a+y.a),max(x.b+y.a,y.b); 18 19 int calc(ji x,int y) 20 return max(x.a+y,x.b); 21 22 void update(int k,ji a,ji b) 23 f[k]=max(f[k],jia(laz[k],b)); 24 laz[k]=jia(laz[k],a); 25 mx[k][1]=max(mx[k][1],calc(b,mx[k][0])); 26 mx[k][0]=calc(a,mx[k][0]); 27 28 void up(int k) 29 mx[k][0]=max(mx[L][0],mx[R][0]); 30 mx[k][1]=max(mx[L][1],mx[R][1]); 31 32 void down(int k) 33 update(L,laz[k],f[k]); 34 update(R,laz[k],f[k]); 35 laz[k]=f[k]=0,-oo; 36 37 void build(int k,int l,int r) 38 laz[k]=f[k]=ji0,-oo; 39 if (l==r) 40 scanf("%d",&mx[k][0]); 41 mx[k][1]=mx[k][0]; 42 return; 43 44 build(L,l,mid); 45 build(R,mid+1,r); 46 up(k); 47 48 void update(int k,int l,int r,int x,int y,ji z) 49 if ((l>y)||(x>r))return; 50 if ((x<=l)&&(r<=y)) 51 update(k,z,z); 52 return; 53 54 down(k); 55 update(L,l,mid,x,y,z); 56 update(R,mid+1,r,x,y,z); 57 up(k); 58 59 int query(int k,int l,int r,int x,int y,int z) 60 if ((l>y)||(x>r))return -oo; 61 if ((x<=l)&&(r<=y))return mx[k][z]; 62 down(k); 63 return max(query(L,l,mid,x,y,z),query(R,mid+1,r,x,y,z)); 64 65 int main() 66 scanf("%d",&n); 67 build(1,1,n); 68 scanf("%d",&m); 69 for(int i=1;i<=m;i++) 70 scanf("%s%d%d",s,&x,&y); 71 if ((s[0]==‘Q‘)||(s[0]==‘A‘)) 72 printf("%d\n",query(1,1,n,x,y,s[0]==‘A‘)); 73 continue; 74 75 scanf("%d",&z); 76 if (s[0]==‘P‘)update(1,1,n,x,y,jiz,-oo); 77 else update(1,1,n,x,y,ji-oo,z); 78 79
以上是关于[bzoj3064]CPU监控的主要内容,如果未能解决你的问题,请参考以下文章