Cod sursa(job #2939953)

Utilizator Gica-gicutaGeorge Gica-gicuta Data 14 noiembrie 2022 16:08:20
Problema Datorii Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.48 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("datorii.in");
ofstream fout("datorii.out");
const long long cst=15005;
long long v[cst],arb[4*cst];
void build(long long nod,long long i1,long long i2)
{
    if(i1==i2)
        arb[nod]=v[i1];
    else
    {
        long long mij=(i1+i2)/2;
        build(2*nod,i1,mij);
        build(2*nod+1,mij+1,i2);
        arb[nod]=arb[2*nod]+arb[2*nod+1];
    }
}
void mod(long long nod,long long i1,long long i2,long long i,long long a)
{
    if(i1==i2)
        arb[nod]-=a;
    else
    {
        long long mij=(i1+i2)/2;
        if(i<=mij)
            mod(2*nod,i1,mij,i,a);
        else
            mod(2*nod+1,mij+1,i2,i,a);
        arb[nod]=arb[nod*2]+arb[nod*2+1];
    }
}
long long calc(long long nod,long long i1,long long i2,long long a,long long b)
{
    if(i1>=a&&b>=i2)
        return arb[nod];
    else
    {
        long long mij=(i1+i2)/2;
        if(b<=mij)
            return calc(2*nod,i1,mij,a,b);
        else if(a>=mij+1)
            return calc(2*nod+1,mij+1,i2,a,b);
        return calc(2*nod,i1,mij,a,b)+calc(2*nod+1,mij,i2,a,b);
    }
}
int main()
{
    long long n,k;
    fin>>n>>k;
    for(long long i=1; i<=n; i++)
    {
        fin>>v[i];
    }
    build(1,1,n);
    for(long long i=1; i<=n; i++)
    {
        long long c,a,b;
        fin>>c>>a>>b;
        if(!c)
            mod(1,1,n,a,b);
        else
            fout<<calc(1,1,n,a,b)<<'\n';
    }
    return 0;
}