Cod sursa(job #828596)

Utilizator IoannaPandele Ioana Ioanna Data 3 decembrie 2012 23:03:53
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 kb
#include<fstream>
#define NMAX 32767

using namespace std;

int v[NMAX],n,m;
int p,q;

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

void addToTree(int st,int dr,int k)
{
    if (st==dr)
    {
        v[k]+=q;
        return;
    }
    int mij=(st+dr)/2;
    if (p<=mij)
        addToTree(st,mij,2*k);
    else addToTree(mij+1,dr,2*k+1);
    v[k]=v[2*k]+v[2*k+1];
}

void scan()
{
    in>>n>>m;
    for (int i=1;i<=n;i++)
    {
        in>>q;
        p=i;
        addToTree(1,n,1);
    }
}

int query(int st, int dr, int k)
{
    int s=0;
    if (p<=st && dr<=q)
    {
        return v[k];
    }
    int mij;
    mij=(st+dr)/2;
    if (p<=mij)
        s=s+query(st,mij,2*k);
    if (q>mij)
        s=s+query(mij+1,dr,2*k+1);
    return s;

}
void solve()
{
    int o;
    for (int i=1;i<=m;i++)
    {
        in>>o>>p>>q;
        if (!o)
        {
            q=q*(-1);
            addToTree(1,n,1);
        }
        else out<<query(1,n,1)<<"\n";
    }


}
int main()
{
    scan();
    solve();
    return 0;
}