- #include < cstdio > #include < cmath > #include < iostream > #define maxn 1000000 using namespace std;
- int size,
- arr[maxn],
- block[maxn],
- add[maxn],
- n,
- q,
- swi,
- a,
- b,
- c;
- void modify(int a, int b, int c) {
- a--,
- b--;
- for (int i = a; i <= min(block[a] * size - 1, b); i++) arr[i] += c;
- if (block[a] != block[b]) {
- for (int i = (block[b] - 1) * size; i <= b; i++) arr[i] += c;
- }
- for (int i = block[a] + 1; i < block[b]; i++) add[i] += c;
- }
- int main() {
- scanf("%d", &n);
- size = (int) sqrt(n);
- for (int i = 0; i < n; i++) scanf("%d", &arr[i]);
- for (int i = 0; i < n; i++) block[i] = i / size + 1;
- // for(int i = 0;i < n;i++) printf("#%d: block->%d\n",i+1,block[i]);
- scanf("%d", &q);
- for (int i = 1; i <= q; i++) {
- scanf("%d", &swi);
- if (swi % 2) {
- scanf("%d%d%d", &a, &b, &c);
- // for(int i = 1;i <= n;i++) printf("#%d: add->%d\n",i,add[block[i]]);
- modify(a, b, c);
- } else {
- scanf("%d", &a);
- printf("%d\n", arr[a - 1] + add[block[a - 1]]);
- }
- }
- // for(int i = 0;i < n;i++) printf("#%d: block[%d]\n",i,block[i]);
- return 0;
- }
来源: http://www.bubuko.com/infodetail-2304881.html