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 |
RE,求解释,附代码!#include <iostream> #include <cstdio> using namespace std; const int maxn=111111; #define lson l, m, rt<<1 #define rson m+1, r, rt<<1|1 long long sum[maxn<<2]; long long col[maxn<<2]; void PushDown(int rt, int len) { col[rt<<1|1] += col[rt]; col[rt<<1] += col[rt]; sum[rt<<1] += (len-(len>>1))*col[rt]; sum[rt<<1|1] += (len>>1)*col[rt]; col[rt] = 0; } void PushUp(int rt) { sum[rt] = sum[rt<<1]+sum[rt<<1|1]; } void build(int l, int r, int rt) { col[rt] = 0; if (l == r) { scanf("%lld", &sum[rt]); return ; } int m = (l+r)>>1; build(lson); build(rson); PushUp(rt); } void Update(int L, int R, int num, int l, int r, int rt) { if (L<=l && r<=R) { col[rt] += num; sum[rt] += (long long)num*(r-l+1); return ; } if (col[rt] != 0) PushDown(rt, r-l+1); int m = (l+r)>>1; if (L<=m) Update(L, R, num, lson); if (R>m) Update(L, R, num, rson); PushUp(rt); } long long Query(int L, int R, int l ,int r, int rt) { if (col[rt] != 0) PushDown(rt, r-l+1); if (L<=l && r<=R) { return sum[rt]; } int m = (l+r)>>1; long long ans = 0; if (L<=m) ans += Query(L, R, lson); if (R>m) ans += Query(L, R, rson); return ans; } int main() { int N, Q, a, b, c; char op[5]; //freopen("1.txt", "w", stdout); scanf("%d%d", &N, &Q); build(1, N, 1); // cout<<"AAAAAAAAA"<<endl; while (Q--) { scanf("%s", op); if (op[0] == 'Q') { scanf("%d%d", &a, &b); printf("%lld\n", Query(a, b, 1, N, 1)); } else if (op[0] == 'C') { scanf("%d%d",&a, &b); scanf("%d", &c); Update(a, b, c, 1, N, 1); } } } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator