Cod sursa(job #2901224)

Utilizator adamemi02emanuel adam adamemi02 Data 13 mai 2022 13:04:53
Problema Datorii Scor 60
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.32 kb

#include<fstream>
using namespace std;
int arb[300000],a[100001];
void arbore(int index,int stanga,int dreapta)
{
    if(stanga==dreapta)
    {
        arb[index]=a[stanga];
        return;

    }
    int mijloc=(stanga+dreapta)/2;
    arbore(2*index,stanga,mijloc);
    arbore(2*index+1,mijloc+1,dreapta);

    arb[index]=arb[2*index]+arb[2*index+1];

}

void op0(int index,int stanga,int dreapta,int T,int V)
{
   if(T<stanga||T>dreapta)
       return;
    if(stanga==dreapta)
    {
        
        arb[index]-=V;
        return;

    }
    int mijloc=(stanga+dreapta)>>1;
    op0(2*index,stanga,mijloc,T,V);
    op0(2*index+1,mijloc+1,dreapta,T,V);

    arb[index]=arb[2*index]+arb[2*index+1];

}

int op1(int index,int stanga,int dreapta,int i,int j)
{
    if(j<stanga||dreapta<i)
        return 0;
    if(i<=stanga && j>=dreapta)
        return arb[index];
    int mijloc=(stanga+dreapta)>>1;
    return op1(2*index,stanga,mijloc,i,j)+op1(2*index+1,mijloc+1,dreapta,i,j);


}
int main() {
    ifstream fin("datorii.in");
    ofstream fout("datorii.out");
    int N,Q;
    fin>>N>>Q;
    for(int i=1;i<=N;i++)
        fin>>a[i];

    arbore(1,1,N);


    for(int i=1;i<=Q;i++)
    {
        int x,x1,x2;
        fin>>x>>x1>>x2;
        if(x==0)
        op0(1,1,N,x1,x2);
        else{
            fout<<op1(1,1,N,x1,x2)<<"\n";

        }
    }



}