标签:style blog io color sp on div log bs
1 #include <stdio.h> 2 #define lson l,mid,id<<1 3 #define rson mid+1,r,id<<1|1 4 const int MM = 100001; 5 int num[MM<<2],lazy[MM<<2]; 6 7 void push_down(int l,int r,int id) 8 { 9 int mid=(l+r)>>1; 10 num[id<<1]=lazy[id]*(mid-l+1); 11 num[id<<1|1]=lazy[id]*(r-mid); 12 lazy[id<<1]=lazy[id<<1|1]=lazy[id]; 13 lazy[id]=0; 14 } 15 void build_tree(int l,int r,int id) 16 { 17 lazy[id]=0; 18 if(l==r) 19 { 20 scanf("%d",&num[id]); 21 return; 22 } 23 else 24 { 25 int mid=(l+r)>>1; 26 build_tree(lson); 27 build_tree(rson); 28 num[id]=num[id<<1]+num[id<<1|1]; 29 } 30 } 31 32 void Update(int L,int R,int e,int l,int r,int id) 33 { 34 if(L<=l&&r<=R) 35 { 36 num[id]=(r-l+1)*e; 37 lazy[id]=e; 38 return; 39 } 40 if(lazy[id])push_down(l,r,id); 41 int mid=(l+r)>>1; 42 if(L<=mid) 43 Update(L,R,e,lson); 44 if(R>mid) 45 Update(L,R,e,rson); 46 num[id]=num[id<<1]+num[id<<1|1]; 47 48 } 49 int Query(int L,int R,int l,int r,int id) 50 { 51 if(L<=l&&r<=R) 52 { 53 return num[id]; 54 } 55 if(lazy[id])push_down(l,r,id); 56 int mid=(l+r)>>1; 57 int ret=0; 58 if(L<=mid)ret+=Query(L,R,lson); 59 if(R>mid)ret+=Query(L,R,rson); 60 num[id]=num[id<<1]+num[id<<1|1]; 61 return ret; 62 } 63 int main() 64 { 65 int n,m,op,x,y,z; 66 scanf("%d",&n); 67 build_tree(1,n,1); 68 scanf("%d",&m); 69 while(m--) 70 { 71 scanf("%d",&op); 72 if(op==1) 73 { 74 scanf("%d %d %d",&x,&y,&z); 75 Update(x,y,z,1,n,1); 76 } 77 else 78 { 79 scanf("%d %d",&x ,&y); 80 int ans=Query(x,y,1,n,1); 81 printf("%d\n",ans ); 82 } 83 } 84 }
标签:style blog io color sp on div log bs
原文地址:http://www.cnblogs.com/sylvialucy/p/4135592.html