hiho week 20 register

Ended

Participants:214

Verdict:Accepted
Score:100 / 100
Submitted:2014-11-15 21:48:38

Lang:G++

Edit
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include<cstdio>
#define mid (l+r>>1)
#define pd(o,l,r) tag[o<<1]=tag[o<<1|1]=tag[o],sum[o<<1]=tag[o]*(mid-l+1),sum[o<<1|1]=tag[o]*(r-mid),tag[o]=0
int ans,sum[263000],tag[263000],v,n,q,op,x,y,i,aa;char ch;int F(){
    while(ch=getchar(),ch<'0'||ch>'9');aa=ch-48;
    while(ch=getchar(),ch>='0'&&ch<='9')aa=aa*10+ch-48;return aa;
}void bt(int o,int l,int r){
    l==r?sum[o]=F():(bt(o<<1,l,mid),bt(o<<1|1,mid+1,r),sum[o]=sum[o<<1]+sum[o<<1|1]);
}void update(int o,int l,int r){
    x<=l&&r<=y?tag[o]=v,sum[o]=v*(r-l+1):(tag[o]?pd(o,l,r),1:1,
    x<=mid?update(o<<1,l,mid),1:1,mid<y?update(o<<1|1,mid+1,r),1:1,sum[o]=sum[o<<1]+sum[o<<1|1]);
}void query(int o,int l,int r){
    x<=l&&r<=y?ans+=sum[o]:(tag[o]?pd(o,l,r),1:1,
    x<=mid?query(o<<1,l,mid),1:1,mid<y?query(o<<1|1,mid+1,r),1:1);
}int main(){
    for(bt(1,1,n=F()),q=F();q--;op=F(),x=F(),y=F(),
    op?v=F(),update(1,1,n),1:(ans=0,query(1,1,n),printf("%d\n",ans)));
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX