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 |
尼玛!!!线段树像乌龟!!#include <stdio.h> #include <iostream> #include <algorithm> #define M 1000000+5 using namespace std; struct note { __int64 left,right,sum,add; int flag; }tree[M*4]; __int64 a[M]; void build (__int64 l,__int64 r,__int64 i) { if(l==r) tree[i].sum=a[r]; tree[i].left=l; tree[i].right=r; tree[i].add=0; if(l==r) return; __int64 mid=(l+r)/2; build(l,mid,i<<1); build(mid+1,r,i<<1|1); tree[i].sum=tree[i<<1].sum+tree[i<<1|1].sum; } void insert(__int64 l,__int64 r,__int64 i,__int64 val) { if(tree[i].left==l&&tree[i].right==r) { tree[i].add+=val; return; } if(tree[i].left==tree[i].right) return ; __int64 mid=(tree[i].left+tree[i].right)/2; if(r<=mid) insert(l,r,i<<1,val); else if(l>mid) insert(l,r,i<<1|1,val); else { insert(l,mid,i<<1,val); insert(mid+1,r,i<<1|1,val); } tree[i].sum= tree[i<<1].sum+tree[i<<1].add*(tree[i<<1].right-tree[i<<1].left+1); tree[i].sum+=tree[i<<1|1].sum+tree[i<<1|1].add*(tree[i<<1|1].right-tree[i<<1|1].left+1); } __int64 s; void query(__int64 l,__int64 r,__int64 i,__int64 k ) { if(tree[i].left==l&&tree[i].right==r) { s+=(tree[i].sum+(tree[i].add+k)*(tree[i].right-tree[i].left+1)); return; } if(tree[i].left==tree[i].right) return ; __int64 mid=(tree[i].left+tree[i].right)/2; if(r<=mid) query(l,r,i<<1,k+tree[i].add); else if(l>mid) query (l,r,i<<1|1,k+tree[i].add); else { query(l,mid,i<<1,k+tree[i].add); query(mid+1,r,i<<1|1,k+tree[i].add); } } int main() { __int64 N,Q; while(~scanf("%I64d%I64d",&N,&Q)) { __int64 i; for( i=1;i<=N;++i) scanf("%I64d",&a[i]); build (1,N,1); while(Q--) { char str[45]; scanf("%s",str); if(str[0]=='Q') { __int64 st,en; scanf("%I64d%I64d",&st,&en); s=0; query(st,en,1,0); printf("%I64d\n",s); } else { __int64 q,w,e; scanf("%I64d%I64d%I64d",&q,&w,&e); insert(q,w,1,e); } } } } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator