Cod sursa(job #2071207)

Utilizator vladm98Munteanu Vlad vladm98 Data 20 noiembrie 2017 14:37:54
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.81 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 compute1(int pozitie2)
{
    int rez=0;
    for(int i=pozitie2;i>=1;i-=zeros(i))
    {
        rez+=aib[i];
    }
    return rez;
}
int compute (int poz1, int poz2)
{
    return compute1(poz2) - compute1(poz1 - 1);
}
int main()
{
    // return 0;
    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;
        }
    }
}