Cod sursa(job #2638403)

Utilizator bogikanagyNagy Boglarka bogikanagy Data 28 iulie 2020 09:48:56
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.25 kb
//#include <iostream>
#include <fstream>
#include <vector>

using namespace std;
ifstream cin ("datorii.in");
ofstream cout ("datorii.out");

vector <int> x;

long long n,m,i,j,t,a,b,sum;
void berak (int bal,int jobb, int gyoker, int poz, int a)
{
    if (bal==jobb)
    {
        x[gyoker]=a;
        return;
    }

    int kozep=(jobb+bal)/2;
    if (poz<=kozep) berak(bal, kozep, 2*gyoker,poz,a);
    else berak(kozep+1, jobb, 2*gyoker+1,poz,a);

    x[gyoker]=x[2*gyoker]+x[2*gyoker+1];
}
void leker (int bal, int jobb, int gyoker, int a, int b)
{
    if (a<=bal && jobb<=b)
    {
        sum+=x[gyoker];
        return;
    }
    int kozep=(bal+jobb)/2;
    if (a<=kozep) leker(bal,kozep,2*gyoker,a,b);
    if (kozep<b) leker(kozep+1,jobb,2*gyoker+1,a,b);

}
int main()
{
    cin>>n>>m;
    t=-1;
    x.resize(4*n+1);
    vector <int> y(n+1,0);
    for (i=1;i<=n;++i)
    {
        cin>>y[i];
        berak(1,n,1,i,y[i]);
    }

    for (i=1;i<=m;++i)
    {
        cin>>t>>a>>b;
        if (t==0)
        {
            y[a]-=b;
            berak(1,n,1,a,y[a]);
        }
        else
        {
            sum=0;
            leker(1,n,1,a,b);
            cout<<sum<<"\n";
        }
    }
    return 0;
}