Cod sursa(job #2712089)

Utilizator EszterHalasz Eszter Eszter Data 25 februarie 2021 10:07:43
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.52 kb
//#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

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

vector<int>x;

int n,m,i,a,b,c;

void betesz(int bal, int jobb, int gyoker)
{
    if(bal==jobb)
    {
        x[gyoker]=a;
        return;
    }
    int kozep;
    kozep=(bal+jobb)/2;

    if(i<=kozep) betesz(bal,kozep,gyoker*2);
    else betesz(kozep+1,jobb,gyoker*2+1);

    x[gyoker]=x[gyoker*2+1]+x[gyoker*2];
}

void betesz2(int bal,int jobb,int gyoker,int poz,int k)
{
    if(bal==jobb)
    {
        x[gyoker]-=k;
        return;
    }
    int kozep;
    kozep=(bal+jobb)/2;
    if(poz<=kozep) betesz2(bal,kozep,gyoker*2,poz,k);
    else betesz2(kozep+1,jobb,gyoker*2+1,poz,k);

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

    return sumb+sumj;
}
int main()
{
    cin>>n>>m;
    x.resize(4*n+1);
    for(i=1;i<=n;++i)
    {
        cin>>a;
        betesz(1,n,1);
    }

    //for(i=1;i<=4*n;++i)
      //  cout<<x[i]<<" ";

    for(i=1;i<=m;++i)
    {
        cin>>a>>b>>c;
        if(a==0)
        {
            betesz2(1,n,1,b,c);
        }
        if(a==1)
        {
            cout<<leker(1,n,1,b,c)<<"\n";
        }
    }
    return 0;
}