Cod sursa(job #3216175)

Utilizator MegaCoderMinoiu Teodor Mihai MegaCoder Data 15 martie 2024 18:16:21
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.97 kb
#include<fstream>
std::ifstream fin("datorii.in");
std::ofstream fout("datorii.out");
int n, m;
unsigned long long aib[15001];
int step(int n)
{
    return n&(-n);
}
void update(unsigned long long val, int start)
{
    int i=start;
    while(i<=n)
    {
        aib[i]+=val;
        i+=step(i);
    }
}
void debt(unsigned long long val, int start)
{
    int i=start;
    while(i<=n)
    {
        aib[i]-=val;
        i+=step(i);
    }
}
unsigned long long query(int pos)
{
    unsigned long long s=0;
    while(pos>0)
    {
        s+=aib[pos];
        pos-= step(pos);
    }
    return s;
}
void solve()
{
    fin>>n>>m;
    for(int index=1; index<=n; ++index)
    {
        unsigned long long val;
        fin>>val;
        update(val, index);
    }
    for(int index=0; index<m; ++index)
    {
        int q, a, b;
        fin>>q>>a>>b;
        if(!q)
            debt(b, a);
        else
            fout<<(query(b)-query(a-1))<<'\n';
    }
}
int main()
{
    solve();
    return 0;
}