Cod sursa(job #1533446)

Utilizator AdrianVrAdrian Stefan Vramulet AdrianVr Data 22 noiembrie 2015 15:54:18
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.23 kb
#include <fstream>
using namespace std;
ifstream f("datorii.in");
ofstream g("datorii.out");
int N,M,S[15001],A[4*15001],x,a,b,T,V,P,Q;
short cod;
int query(int nod, int st,int dr)
{
    int mij=(st+dr)/2,s1=0,s2=0;
    if(a<=st && b>=dr)
        return A[nod];
    else
    {
        if(a<=mij)
            s1=query(2*nod,st,mij);
        if(b>mij)
            s2=query(2*nod+1,mij+1,dr);
        return s1+s2;
    }

}
void update(int nod, int st, int dr)
{
    if(a<=st && b>=dr)
        A[nod]-=V;
    else
    {
        int mij=(st+dr)/2;
        if(a<=mij)
            update(2*nod,st,mij);
        if(b>mij)
            update(2*nod+1,mij+1,dr);
        A[nod]=A[2*nod+1]+A[2*nod];
    }

}
int main()
{
    int i;

    f>>N>>M;
    for(i=1; i<=N; i++)
    {
        f>>S[i];
        a=i;
        b=i;
        V=-S[i];
        update(1,1,N);
    }

    for(i=1; i<=M; i++)
    {
        f>>cod;
        if(cod==0)
        {
            f>>T>>V;
            a=T;
            b=T;
            update(1,1,N);
        }
        if(cod==1)
        {
            f>>P>>Q;
            a=P;
            b=Q;
            g<<query(1,1,N);
            g<<'\n';
        }
    }
    return 0;
}