Cod sursa(job #950438)

Utilizator Paula-ElenaPaula-Elena Margarit Paula-Elena Data 16 mai 2013 20:30:46
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.23 kb
#include<fstream>
using namespace std;

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

const int MAXN = 100002;
int arb[MAXN], N, M, X, T, Q, P, V, poz, val;


void update(int p, int st, int dr)
{
    if(st == dr){
        arb[p] -= val;
        return;
    }
    int mij = (st+dr)/2;
    if(poz <= mij)
        update(2*p, st, mij);
    else
        update(2*p+1, mij+1, dr);
    arb[p] = arb[2*p] + arb[2*p+1];
}

int query(int p, int st, int dr)
{
    if(P<=st && dr<=Q)
        return arb[p];
    int mij = (st + dr)/2, m1=0, m2=0;
    if(P <= mij)
        m1 = query(2*p, st, mij);
    if(mij+1 <= Q)
        m2 = query(2*p+1, mij+1, dr);
    return m1+m2;
}


int main()
{
    int i;
    fin >> N >> M;
    for(i=1; i<=N; ++i)
    {
        fin >> X;
        poz = i;
        val = -X;
        update(1, 1, N);
    }

    for(i=1; i<=M; ++i)
    {
        fin >> X;
        if(X == 0)
        {
            fin >> T >> V;
            poz = T;
            val = V;
            update(1, 1, N);
        }
        else
        {
            fin >> P >> Q;
            fout << query(1, 1, N) << "\n";
        }
    }

    fin.close();
    fout.close();

    return 0;
}