Pagini recente » Cod sursa (job #3345773) | Cod sursa (job #74244) | Cod sursa (job #3353328) | Cod sursa (job #3353797) | Cod sursa (job #3349059)
#include <iostream>
#include <fstream>
#define zeros(x) ((x^(x-1))&x)
using namespace std;
ifstream f("datorii.in");
ofstream g("datorii.out");
const int NMAX = 15001;
int N,Q;
int AIB[NMAX], v[NMAX];
void initializare()
{
for(int i=1;i<=N;i++)
{
AIB[i]+=v[i];
int j=i+(i&-i);
if(j<=N)
AIB[j]+=AIB[i];
}
}
void Add(int x, int quantity)
{
for(int i=x;i<=N;i+=zeros(i))
AIB[i]+=quantity;
}
int Compute(int x)
{
int i, ret=0;
for(i=x;i>0;i-=zeros(i))
ret+=AIB[i];
return ret;
}
int main()
{
int caz, a, b;
f>>N>>Q;
for(int i=1;i<=N;i++)
f>>v[i];
initializare();
for(int i=1;i<=Q;i++)
{
f>>caz>>a>>b;
if(caz==1)
g<<Compute(b)-Compute(a-1)<<'\n';
else Add(a,-b);
}
return 0;
}