Cod sursa(job #2355776)

Utilizator marcogoldPop Mihali Marco Silviu marcogold Data 26 februarie 2019 12:18:14
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.77 kb
#include <iostream>
#include <fstream>
using namespace std;
ofstream fo("datorii.out");
ifstream fi("datorii.in");

int n,m,sir[100005],test,a,b,AIB[100005];

void adaugare(int poz)
{
    for(int i=poz;i<=n;i+=i&(-i))AIB[i]+=sir[poz];
}


void modifica(int poz,int dif)
{
    for(int i=poz;i<=n;i+=(-i)&i)AIB[i]-=dif;
}

int interogare(int poz)
{
        int sol=0;

        for(int i=poz;i>0;i-=(-i)&i)sol+=AIB[i];
    return sol;
}
int main()
{
fi>>n>>m;

for(int i=1;i<=n;i++)
    fi>>sir[i];
 for(int i=1;i<=n;i++)
        adaugare(i);


for(int i=1;i<=m;i++)
{
    fi>>test;
    fi>>a>>b;

    if(test==0)
        modifica(a,b);
    else
        fo<<interogare(b)-interogare(a-1)<<'\n';

}

fi.close();
fo.close();
    return 0;
}