标签:
#include<algorithm> #include<iostream> #include<cstdio> #include<cstring> #include<queue> #include<math.h> using namespace std; #define N 110000 #define lson rood<<1 #define rson rood<<1|1 int w[N]; struct node { int l,r,mid,len; long long v,e; }a[N<<2]; void q(int rood,int l,int r) { a[rood].l=l;a[rood].r=r;a[rood].mid=(r+l)/2; a[rood].e=0;a[rood].len=(r-l+1); if(l==r) { a[rood].v=w[l]; return ; } q(lson,l,a[rood].mid); q(rson,a[rood].mid+1,r); a[rood].v=a[lson].v+a[rson].v; } void qq(int rood,int l,int r,int g) { a[rood].v+=(r-l+1)*g; if(a[rood].l==l&&a[rood].r==r) { a[rood].e+=g; return ; } if(a[rood].mid>=r) qq(lson,l,r,g); else if(a[rood].mid<l) qq(rson,l,r,g); else { qq(lson,l,a[rood].mid,g); qq(rson,a[rood].mid+1,r,g); } } void Q(int rood) { a[lson].v+=a[lson].len*a[rood].e; a[rson].v+=a[rson].len*a[rood].e; a[lson].e+=a[rood].e; a[rson].e+=a[rood].e; a[rood].e=0; } long long qqq(int rood,int l,int r) { if(a[rood].l==l&&a[rood].r==r) return a[rood].v; Q(rood); if(a[rood].mid>=r) return qqq(lson,l,r); else if(a[rood].mid<l) return qqq(rson,l,r); else { long long x=qqq(lson,l,a[rood].mid); long long y=qqq(rson,a[rood].mid+1,r); return x+y; } } int main() { int n,m,e,f,g; char str[12]; while(scanf("%d%d",&n,&m)!=EOF) { for(int i=1;i<=n;i++) scanf("%d",&w[i]); q(1,1,n); while(m--) { scanf("%s%d%d",str,&e,&f); if(str[0]==‘Q‘) { printf("%lld\n",qqq(1,e,f)); continue; } scanf("%d",&g); qq(1,e,f,g); } } return 0; }
http://poj.org/problem?id=3468
标签:
原文地址:http://www.cnblogs.com/a719525932/p/5667222.html