Pagini recente » Cod sursa (job #811352) | Istoria paginii runda/cuplajesiflux | Istoria paginii runda/winners23 | Cod sursa (job #2131740) | Cod sursa (job #2433555)
#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;
}