Cod sursa(job #2379428)

Utilizator albucristianAlbu Cristian-Gabriel albucristian Data 13 martie 2019 16:41:15
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.05 kb
#include <fstream>
using namespace std;
int arb[15002];
int n,m,a,b,t,op;
void update(int poz,int val)
{
    int c=0;
    while(poz<=n)
    {
        arb[poz]+=val;
        while(!(poz&(1<<c)))
            c++;
        poz+=(1<<c);
        c++;
    }
}
void update_minus(int poz,int val)
{
    int c=0;
    while(poz<=n)
    {
        arb[poz]-=val;
        while(!(poz&(1<<c)))
            c++;
        poz+=(1<<c);
        c++;
    }
}
int query(int poz)
{
    int c=0,s=0;
    while(poz>0)
    {
        s+=arb[poz];
        while(!(poz&(1<<c)))
            c++;
        poz-=(1<<c);
        c++;
    }
    return s;
}
int main()
{
    ifstream in("datorii.in");
    ofstream out("datorii.out");
    in>>n>>m;
    for(int i=1;i<=n;i++)
    {
        in>>t;
        update(i,t);
    }
    for(int i=1;i<=m;i++)
    {
        in>>op>>a>>b;
        if(op==0)
        {
            update_minus(a,b);
        }
        else
        {
            out<<query(b)-query(a-1)<<"\n";
        }
    }
    return 0;
}