标签:
1.ST表
1RE line:for(int j=1;(1<<j)<=n;j++)
1WA line24:return max(d[L][k],d[R-(1<<k)+1][k]);
1 #include<iostream> 2 #include<cstdio> 3 #include<cmath> 4 #include<algorithm> 5 #include<queue> 6 #include<cstring> 7 #define PAU putchar(‘ ‘) 8 #define ENT putchar(‘\n‘) 9 using namespace std; 10 const int maxn=10000+10; 11 int d[maxn][21],Log[maxn],n,Q; 12 inline int read(){ 13 int x=0,sig=1;char ch=getchar(); 14 while(!isdigit(ch)){if(ch==‘-‘) sig=-1;ch=getchar();} 15 while(isdigit(ch)) x=10*x+ch-‘0‘,ch=getchar(); 16 return x*=sig; 17 } 18 inline void write(int x){ 19 if(x==0){putchar(‘0‘);return;}if(x<0) putchar(‘-‘),x=-x; 20 int len=0,buf[15];while(x) buf[len++]=x%10,x/=10; 21 for(int i=len-1;i>=0;i--) putchar(buf[i]+‘0‘);return; 22 } 23 int query(int L,int R){ 24 int k=Log[R-L+1];return max(d[L][k],d[R-(1<<k)+1][k]); 25 } 26 void init(){ 27 n=read();Q=read();Log[0]=-1; 28 for(int i=1;i<=n;i++) d[i][0]=read(),Log[i]=Log[i>>1]+1; 29 for(int j=1;(1<<j)<=n;j++) 30 for(int i=1;i+(1<<j)-1<=n;i++) 31 d[i][j]=max(d[i][j-1],d[i+(1<<j-1)][j-1]); 32 return; 33 } 34 void work(){ 35 int L,R; 36 while(Q--){ 37 L=read();R=read();write(query(L,R));ENT; 38 } 39 return; 40 } 41 void print(){ 42 return; 43 } 44 int main(){ 45 init();work();print();return 0; 46 }
2.线段树
1.WA build():没处理好L==R时的siz。。。
1 #include<iostream> 2 #include<cstdio> 3 #include<cmath> 4 #include<algorithm> 5 #include<queue> 6 #include<cstring> 7 #define PAU putchar(‘ ‘) 8 #define ENT putchar(‘\n‘) 9 #define CH for(int d=0;d<2;d++) if(ch[d]) 10 #define lson x->ch[0],L,M 11 #define rson x->ch[1],M+1,R 12 using namespace std; 13 const int maxn=100000+10,maxnode=200000+10,inf=-1u>>1; 14 struct node{ 15 node*ch[2];int mi,mx,sm,set,add,siz;node(){add=0;set=inf;} 16 void init(int a){mi=mx=sm=a;return;} 17 void addt(int a){mi+=a;mx+=a;sm+=siz*a;add+=a;return;} 18 void sett(int a){mi=mx=set=a;sm=siz*a;add=0;return;} 19 void update(){ 20 mi=inf;mx=-inf;sm=0;CH{mx=max(mx,ch[d]->mx);mi=min(mi,ch[d]->mi);sm+=ch[d]->sm;}return; 21 } 22 void down(){ 23 if(set!=inf){CH{ch[d]->sett(set);}set=inf;} 24 if(add){CH{ch[d]->addt(add);}add=0;}return; 25 } 26 }seg[maxnode],*nodecnt=seg,*root; 27 int n,Q,ql,qr,cv,tp,A[maxn],_mx,_mi,_sm; 28 void build(node*&x=root,int L=1,int R=n){ 29 x=nodecnt++;int M=L+R>>1; 30 if(~(L^R))x->init(A[M]); 31 else build(lson),build(rson),x->update(); 32 x->siz=R-L+1;return; 33 } 34 void update(node*&x=root,int L=1,int R=n){ 35 if(ql<=L&&R<=qr) 36 if(tp)x->addt(cv);else x->sett(cv); 37 else{int M=L+R>>1;x->down(); 38 if(ql<=M)update(lson);if(qr>M)update(rson);x->update(); 39 }return; 40 } 41 void query(node*x=root,int L=1,int R=n){ 42 if(ql<=L&&R<=qr){ 43 _mx=max(_mx,x->mx); 44 _mi=min(_mi,x->mi); 45 _sm+=x->sm; 46 }else{int M=L+R>>1;x->down(); 47 if(ql<=M)query(lson);if(qr>M)query(rson); 48 }return; 49 } 50 inline int read(){ 51 int x=0,sig=1;char ch=getchar(); 52 while(!isdigit(ch)){if(ch==‘-‘) sig=-1;ch=getchar();} 53 while(isdigit(ch)) x=10*x+ch-‘0‘,ch=getchar(); 54 return x*=sig; 55 } 56 inline void write(int x){ 57 if(x==0){putchar(‘0‘);return;}if(x<0) putchar(‘-‘),x=-x; 58 int len=0,buf[15];while(x) buf[len++]=x%10,x/=10; 59 for(int i=len-1;i>=0;i--) putchar(buf[i]+‘0‘);return; 60 } 61 void init(){ 62 n=read();Q=read(); 63 for(int i=1;i<=n;i++) A[i]=read();build(); 64 return; 65 } 66 void work(){ 67 while(Q--){ 68 tp=read();ql=read();qr=read(); 69 if(tp!=2)cv=read(),update(); 70 else{_mi=inf;_mx=-inf;_sm=0;query(); 71 write(_mx);PAU;write(_mi);PAU;write(_sm);ENT; 72 } 73 } 74 return; 75 } 76 void print(){ 77 return; 78 } 79 int main(){ 80 init();work();print();return 0; 81 }
标签:
原文地址:http://www.cnblogs.com/chxer/p/4660751.html