1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
| #include<iostream> #include<algorithm> #include<cmath> using namespace std; typedef long long LL; const int N = 1e5 + 10; LL sum[N], add[N]; int n, m, len, w[N]; inline int get(int i) { return i / len; } signed main(void) { scanf("%d%d", &n, &m); len = sqrt(n); for(int i = 1;i <= n;i++) { scanf("%d",w + i); sum[get(i)] += w[i]; } for(int i = 1;i <= m;i++) { char op[3]; int l, r, d; scanf("%s %d %d\n", op, &l, &r); if(*op == 'Q') { LL ans = 0; if(get(l) == get(r)) { for(int i = l;i <= r;i++) ans += w[i] + add[get(i)]; } else { int i = l, j = r; while(get(i) == get(l)) ans += w[i] + add[get(i)], i++; while(get(j) == get(r)) ans += w[j] + add[get(j)], j--; for(int k = get(i); k <= get(j); k++) ans += sum[k]; } printf("%lld\n", ans); } if(*op == 'C') { scanf("%d", &d); if(get(l) == get(r)) { for(int i = l; i <= r; i++) w[i] += d, sum[get(i)] += d; } else { int i = l, j = r; while(get(i) == get(l)) w[i] += d, sum[get(i)] += d, i++; while(get(j) == get(r)) w[j] += d, sum[get(j)] += d, j--; for(int k = get(i); k <= get(j); k++) add[k] += d, sum[k] += d * len; } } } }
|