Cod sursa(job #2906694)

Utilizator maiaauUngureanu Maia maiaau Data 27 mai 2022 00:14:59
Problema Datorii Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.89 kb
#include <bits/stdc++.h>
using namespace std;

ifstream f("datorii.in");
ofstream g("datorii.out");

int16_t c;
int n, m, x, y, pw, aux;
int dat[16385];

int interog(int, int, int);
void achit();

int main()
{
    f >> n >> m;

    pw = 1; while(pw < n) pw *= 2;
    pw--;

    for (int i = 1; i <= n; i++)
        f >> dat[pw + i];
    for (int i = pw; i; i--)
        dat[i] = dat[2 * i] + dat[2 * i + 1];

    for(; m; m--){
        f >> c >> x >> y;
        if(c) g << interog(1, 1, pw + 1) << '\n';
        else achit();
    }

    return 0;
}

int interog(int nod, int st, int dr)
{
    if(st > y || dr < x) return 0;
    if(st >= x && dr <= y) return dat[nod];
    int m = (st + dr) / 2;
    return interog(2 * nod, st, m) + interog(2 * nod + 1, m + 1, dr);
}

void achit()
{
    int k = x + pw;
    while(k){
        dat[k] -= y;
        k /= 2;
    }
}