码迷,mamicode.com
首页 > 其他好文 > 详细

2015-7-20 模板练习

时间:2015-07-20 12:29:22      阅读:120      评论:0      收藏:0      [点我收藏+]

标签:

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 }
ST表

 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 }
线段树

 

2015-7-20 模板练习

标签:

原文地址:http://www.cnblogs.com/chxer/p/4660751.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!