Cod sursa(job #3235850)

Utilizator tudoor_balasescuBalasescu Tudor tudoor_balasescu Data 22 iunie 2024 20:31:07
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.12 kb
#include <fstream>

using namespace std;
ifstream fin("datorii.in");
ofstream fout("datorii.out");
int n,m,c,a,b,v[100001];
void update(int val, int poz, int st, int dr, int poz2)
{
    if(st==dr)
    {
        v[poz2]=max(v[poz2]-val,0);
        return;
    }
    int mij=(st+dr)/2;
    if(mij>=poz)
        update(val,poz,st,mij,poz2*2);
    if(mij<poz)
        update(val,poz,mij+1,dr,poz2*2+1);
    v[poz2]=v[poz2*2]+v[poz2*2+1];
}

int query(int x, int y, int st, int dr, int poz2)
{
    if(x<=st && y>=dr)
    {
        return v[poz2];
    }
    int mij=(st+dr)/2;
    int left=0,right=0;
    if(y>mij)
        right=query(x,y,mij+1,dr,poz2*2+1);
    if(x<=mij)
        left=query(x,y,st,mij,poz2*2);
    return left+right;
}
int main()
{
    fin>>n>>m;
    int ad=1;
    while(ad<n)
        ad*=2;
    for(int i=ad;i<ad+n;i++)
        fin>>v[i];
    for(int i=ad-1;i>=1;i--)
        v[i]=v[i*2]+v[i*2+1];
    for(int i=1;i<=m;i++)
    {
        fin>>c>>a>>b;
        if(c)
            fout<<query(a,b,1,ad,1)<<'\n';
        else
            update(b,a,1,ad,1);
    }
    return 0;
}