Cod sursa(job #3202163)

Utilizator SabrinaGiuliaMacoveiciuc Sabrina Giulia SabrinaGiulia Data 10 februarie 2024 21:08:32
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.42 kb
#include <bits/stdc++.h>

using namespace std;

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

int i,j,n,Q,x,y,b,P,sol,t,V[15005],A[60005];

void build(int nod,int st,int dr)
{
    //for(i=1;i<=n;i++)
    //{
    //    g<<A[i]<<' ';
    //}
   // g<<'\n';
    if(st==dr)
        A[nod]=V[st];
    else
    {
        int mid=(st+dr)/2;
        build(2*nod,st,mid);
        build(2*nod+1,mid+1,dr);
        A[nod]=A[2*nod]+A[2*nod+1];
    }
}

void update(int nod,int st,int dr,int poz,int val)
{
    if(st==dr)
        A[nod]-=val;
    else
    {
        int mid=(st+dr)/2;
        if(poz<=mid)
            update(2*nod,st,mid,poz,val);
        else
            update(2*nod+1,mid+1,dr,poz,val);
        A[nod]=A[2*nod]+A[2*nod+1];
    }
}

void query(int nod,int st,int dr,int a,int b)
{
    if(a<=st && dr<=b)
        sol+=A[nod];
    else
    {
        int mid=(st+dr)/2;
        if(a<=mid)
            query(2*nod,st,mid,a,b);
        if(mid+1<=b)
            query(2*nod+1,mid+1,dr,a,b);
    }

}

int main()
{
    f>>n>>Q;
    for(i=1;i<=n;i++)
        f>>V[i];
    build(1,1,n);
//    for(i=1;i<=n;i++)
//    {
//        g<<A[i]<<' ';
//    }
    while(Q--)
    {
        f>>t>>x>>y;
        if(t==0)
            update(1,1,n,x,y);
        else
        {
            sol=0;
            query(1,1,n,x,y);
            g<<sol<<'\n';
        }
    }

    return 0;
}