Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
AC代码#include<cstdio> #include<iostream> #define N 100000 #define ll long long using namespace std; char ord; int n,q; ll A[N+10]; struct node { int l,r; ll sum; ll val; }date[6*N]; void init(int root,int l,int r) { date[root].l=l; date[root].r=r; if(l==r) { date[root].sum=A[l]; return; } int mid=(l+r)>>1; init(root*2,l,mid); init(root*2+1,mid+1,r); date[root].sum=date[root*2].sum+date[root*2+1].sum; } void update(int root,int a,int b,ll c) { if(date[root].val!=0) { date[root*2].val+=date[root].val; date[root*2+1].val+=date[root].val; date[root*2].sum+=date[root].val*(date[root*2].r-date[root*2].l+1); date[root*2+1].sum+=date[root].val*(date[root*2+1].r-date[root*2+1].l+1); date[root].val=0; } if(date[root].l==a&&date[root].r==b) { date[root].val=c; date[root].sum+=c*(date[root].r-date[root].l+1); return; } int mid=(date[root].l+date[root].r)>>1; if(a<=mid&&b<=mid) update(root*2,a,b,c); else if(a>mid&&b>mid) update(root*2+1,a,b,c); else { update(root*2,a,mid,c); update(root*2+1,mid+1,b,c); } date[root].sum=date[root*2].sum+date[root*2+1].sum; } ll query(int root,int a,int b) { if(date[root].val) { date[root*2].val+=date[root].val; date[root*2+1].val+=date[root].val; date[root*2].sum+=date[root].val*(date[root*2].r-date[root*2].l+1); date[root*2+1].sum+=date[root].val*(date[root*2+1].r-date[root*2+1].l+1); date[root].val=0; } if(date[root].l==a&&date[root].r==b) return date[root].sum; int mid=(date[root].l+date[root].r)>>1; if(a<=mid&&b<=mid) return query(root*2,a,b); else if(a>mid&&b>mid) return query(root*2+1,a,b); return query(root*2,a,mid)+query(root*2+1,mid+1,b); } int main() { scanf("%d%d",&n,&q); for(int i=1;i<=n;i++) scanf("%lld",&A[i]); init(1,1,n); for(int i=1;i<=q;i++) { scanf("%s",&ord); if(ord=='C') { int a,b; ll c; scanf("%d%d%lld",&a,&b,&c); update(1,a,b,c); } else { int a,b; scanf("%d%d",&a,&b); printf("%lld\n",query(1,a,b)); } } return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator