Cod sursa(job #2638404)

Utilizator EszterHalasz Eszter Eszter Data 28 iulie 2020 09:56:39
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.21 kb
//#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

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

vector<int>x,y;

int n,m,i,a,sum,p,q,r,j;

void bemax(int bal,int jobb,int gyoker,int poz,int k)
{
    if(bal==jobb)
    {
        x[gyoker]=k;
        return;
    }
    int kozep=(jobb+bal)/2;
    if(poz<=kozep) bemax(bal,kozep,gyoker*2,poz,k);
    else bemax(kozep+1,jobb,gyoker*2+1,poz,k);
    x[gyoker]=x[gyoker*2]+x[gyoker*2+1];
}
void leker(int bal,int jobb,int gyoker,int a,int b)
{
    if(a<=bal && jobb<=b)
    {
        sum+=x[gyoker];
        return;
    }
    int kozep=(jobb+bal)/2;
    if(a<=kozep) leker(bal,kozep,gyoker*2,a,b);
    if(kozep<b) leker(kozep+1,jobb,gyoker*2+1,a,b);
}
int main()
{
    cin>>n>>m;
    x.resize(4*n+1);
    y.resize(n+1);
    for(i=1;i<=n;++i)
    {
        cin>>a;
        y[i]=a;
        bemax(1,n,1,i,a);
    }

    for(i=1;i<=m;++i)
    {
        cin>>p>>q>>r;
        if(p==1)
        {
            sum=0;
            leker(1,n,1,q,r);
            cout<<sum<<"\n";
        }
        else
        {
            y[q]-=r;
            bemax(1,n,1,q,y[q]);

        }

    }
    return 0;
}