Cod sursa(job #2202359)

Utilizator apuscasuPuscasu Ana Maria apuscasu Data 8 mai 2018 16:17:34
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.05 kb
#include <fstream>
using namespace std;
ifstream in("datorii.in");
ofstream out("datorii.out");
int arbore[60001],s;


void create(int nod,int val,int a,int b,int poz)
{
    if(a==b)
        {arbore[nod]+=val;return;}
    int mij=(a+b)/2;
    if(poz<=mij)
        create(2*nod,val,a,mij,poz);
    if(poz>mij)
        create(2*nod+1,val,mij+1,b,poz);
    arbore[nod]=arbore[2*nod]+arbore[2*nod+1];
}


void query(int nod,int a,int b,int ua,int ub)
{
    if(a>=ua&&b<=ub)
        s+=arbore[nod];
    else
    {
        int mij=(a+b)/2;
        if(ua<=mij)
            query(2*nod,a,mij,ua,ub);
        if(ub>mij)
            query(2*nod+1,mij+1,b,ua,ub);
    }
}


int main()
{
    int n,m,a,b,c,i,x;
    in>>n>>m;
    for(i=1; i<=n; i++)
    {
        in>>x;
        create(1,x,1,n,i);
    }
    for(i=1; i<=m; i++)
    {
        in>>c>>a>>b;
        if(c==0)
            create(1,-b,1,n,a);
        else
        {
            s=0;
            query(1,1,n,a,b);
            out<<s<<'\n';
        }
    }
    return 0;
}