Cod sursa(job #2071247)

Utilizator frumcrsFrum Cristian-Mihai frumcrs Data 20 noiembrie 2017 15:10:43
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin("datorii.in");
ofstream fout("datorii.out");

#define zeros(x) ((x^(x-1))&x)

int aib[15000],n;

void add(int pozitie, int cantitate)
{
    for(int i=pozitie;i<=n;i+=zeros(i))
    {
        aib[i]+=cantitate;
    }
}
int compute(int pozitie1, int pozitie2)
{
    int rez1=0,rez2=0;
    for(int i=pozitie2;i>0;i-=zeros(i))
    {
        rez1+=aib[i];
    }
     for(int i=pozitie1-1;i>0;i-=zeros(i))
    {
        rez2+=aib[i];
    }
    return rez1-rez2;
}
int main()
{
    int m,i,x,y,z,j;
    fin>>n>>m;
    for(i=1;i<=n;i++)
    {
        fin>>x;
        add(i,x);
    }
    for(i=1;i<=m;i++)
    {
        fin>>x>>y>>z;
        if(x==0)
        {
            add(y,-z);
        }
        if(x==1)
        {
            fout<<compute(y,z)<<endl;
        }
    }
}