Cod sursa(job #2071214)

Utilizator vladm98Munteanu Vlad vladm98 Data 20 noiembrie 2017 14:43:10
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 kb
#include <bits/stdc++.h>

using namespace std;

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


int aib[15005],n;

int zeros (int x)
{
    return x & (-x);
}

void add(int pozitie, int cantitate)
{
    while (pozitie <= n)
    {
        aib[pozitie]+=cantitate;
        pozitie += zeros(pozitie);
    }
}
int compute1(int pozitie2)
{
    int rez=0;
    while (pozitie2)
    {
        rez+=aib[pozitie2];
        pozitie2 -= zeros(pozitie2);
    }
    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;
        }
    }
}