Cod sursa(job #2433555)

Utilizator rd211Dinucu David rd211 Data 27 iunie 2019 22:31:30
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <iostream>
#include <vector>
#include <fstream>
using namespace std;
ifstream fin("datorii.in");
ofstream fout("datorii.out");
vector<int>v(15010);
int n,m;
void buildV()
{
    for(int i = 1;i<=n;i++)
    {
        int i2 = i+(i&(-i));
        if(i2<=n)
            v[i2]+=v[i];
    }
}
void updateV(int pos,int valScazut)
{
    while(pos<=n)
    {
        v[pos]-=valScazut;
        pos=pos+(pos&(-pos));
    }
}
int sum(int pos)
{
    int r=0;
    while(pos>0)
    {
        r+=v[pos];
        pos=pos-(pos&(-pos));
    }
    return r;
}
int sumInterval(int start,int finish)
{
    return sum(finish)-sum(start-1);
}
int main()
{
    int q,s,f;
    fin>>n>>m;
    for(int i = 1;i<=n;i++)
        fin>>v[i];
    buildV();
    while(m--)
    {
        fin>>q>>s>>f;
        if(q)
            fout<<sumInterval(s,f)<<'\n';
        else
            updateV(s,f);
    }
    return 0;
}