Cod sursa(job #2330037)

Utilizator alexdumitrescuDumitrescu George Alex alexdumitrescu Data 27 ianuarie 2019 19:29:34
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <fstream>

using namespace std;
ifstream fin ("datorii.in");
ofstream fout ("datorii.out");
int n, m, i, v[40000], op, a, b, x;
void adaug(int con, int val, int poz, int st, int dr)
{
    if(st==dr)
        {
            v[con]+=val;
            return;
        }
    int mij=(st+dr)/2;
    if(poz<=mij)
        adaug(con*2, val, poz, st, mij);
    else adaug(con*2+1, val, poz, mij+1, dr);

    v[con]+=val;
}
int q(int con, int a, int b, int st, int dr)
{
    if(a<=st&&dr<=b)
        return v[con];

    int rez1=0, rez2=0, mij=(st+dr)/2;
    if(!(b<st||mij<a))
        rez1=q(con*2, a, b, st, mij);
    if(!(b<mij+1||dr<a))
        rez2=q(con*2+1, a, b, mij+1, dr);
    return rez1+rez2;
}
int main()
{
    fin >> n >> m;
    for(i=1;i<=n;i++)
    {
        fin >> x;
        adaug(1, x, i, 1, n);
    }
    for(i=1;i<=m;i++)
    {
        fin >> op >> a >> b;
        if(op==0)
            adaug(1, -b, a, 1, n);
        if(op==1)
            fout << q(1, a, b, 1, n) << '\n';
    }
    return 0;
}