Cod sursa(job #1369676)

Utilizator StefanMudragMudrag Stefan StefanMudrag Data 3 martie 2015 10:35:22
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
#include<iostream>
#include<fstream>
#define NMAX 100001
using namespace std;
ifstream fin("datorii.in");
ofstream fout("datorii.out");
int arb[NMAX];
int n,m;
void update(int poz,int val)
{
    int k=0;
    while(poz<=n)
    {
        arb[poz]-=val;
        while((poz&(1<<k))==0)k++;
        poz+=1<<k;
        k++;
    }

}
int query(int x)
{
    int k=0,s=0;
    while(x>0)
    {
        s+=arb[x];
        while((x&1<<k)==0)k++;
        x-=1<<k;
        k++;
    }
    return s;
}

int main()
{   int val,a,b,op;
    fin>>n>>m;
    for(int i=1;i<=n;i++)
    {
        fin>>val;
        update(i,-val);
    }
    for(int i=1;i<=m;i++)
    {
        fin>>op;
        if(op==1)
        {
            fin>>a>>b;
            fout<<query(b)-query(a-1)<<'\n';
        }
        else
        {
            fin>>a>>b;
            update(a,b);
        }
    }
    fin.close();
    fout.close();
    return 0;
}