| ||||||||||
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 |
WA ...why?#include<stdio.h> typedef struct { int l,r; int num; __int64 sum; }node; node tree[4*100050]; __int64 sum; int build_tree(int a,int b,int p) { tree[p].l = a; tree[p].r = b; tree[p].num = 0; tree[p].sum = 0; if(a == b) return 1; if(a < b) { int t = (a + b) >> 1; build_tree( a, t, 2*p); build_tree( t+1, b, 2*p+1); } return 0; } int insert(int a,int b,int h,int p) { if(tree[p].l == a && tree[p].r == b) { tree[p].num += h; return 1; } else { tree[p].sum +=(b - a + 1)* h; int t = (tree[p].l + tree[p].r) >> 1; if(b <= t) insert( a, b, h, 2*p); else if(a > t) insert( a, b, h, 2*p+1); else { insert( a, t, h, 2*p); insert( t+1, b, h, 2*p+1); } } return 0; } __int64 search_Q(int a,int b,int p) { if(tree[p].l == a && tree[p].r == b) { sum += tree[p].sum + tree[p].num * ( b - a + 1); return 0; } else { int t = (tree[p].l + tree[p].r) >> 1; if(tree[p].num) { tree[2*p].num += tree[p].num; tree[2*p+1].num += tree[p].num; tree[p].sum += (tree[p].r - tree[p].l + 1) * tree[p].num; tree[p].num = 0; } if(b <= t) search_Q( a, b, 2*p); else if(a > t) search_Q( a, b, 2*p+1); else { search_Q( a, t, 2*p); search_Q( t+1, b, 2*p+1); } } return 0; } int main() { int N,M; int i,k,h; int d1,d2,c1,c2,c3; char aa; scanf("%d%d",&N,&M); build_tree( 1, N, 1); for(i = 1;i <= N;i ++) { scanf("%d",&h); insert( i, i, h,1); } for(k = 1;k <= M;k ++) { scanf(" %c",&aa); if(aa == 'Q') { sum = 0; scanf("%d%d",&d1,&d2); search_Q( d1, d2, 1); printf("%I64d\n",sum); } if(aa == 'C') { scanf("%d%d%d",&c1,&c2,&c3); insert( c1, c2, c3, 1); } } return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator