Cod sursa(job #2623315)

Utilizator dianapingu1Diana Vasiliu dianapingu1 Data 2 iunie 2020 22:26:42
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.9 kb
#include <fstream>

#define zeros(x) ((x^(x-1))&x)

using namespace std;

ifstream fin("datorii.in");
ofstream fout("datorii.out");

int aib[15005],n;

void achitare(int val, int zi)
{
    for (int i=zi; i<=n; i+=zeros(i))
        aib[i] += val;
}

int interogare(int zi)
{
    int rez = 0;
    for (int i=zi; i>0; i-=zeros(i))
        rez += aib[i];

    return rez;
}

int main()
{
    int m;
    int op,x,y;
    int zi,val,st,dr;
    fin>>n>>m;

    for (int i=1; i<=n; i++) {
        fin>>x;
        achitare(x,i);
    }

    for (int i=0; i<m; i++) {
        fin>>op;
        switch(op) {
        case 0:
            fin>>zi>>val;
            achitare(-val,zi);
            break;
        case 1:
            fin>>st>>dr;
            val = interogare(dr) - interogare(st-1);
            fout<<val<<'\n';
            break;
        }
    }


    return 0;
}