Pagini recente » Cod sursa (job #1404278) | Cod sursa (job #2812777) | Istoria paginii runda/salut/clasament | Cod sursa (job #1921411) | Cod sursa (job #1199308)
#include <cstdio>
#define DIM 666013
#define Nmax 15005
using namespace std;
char buff[DIM];
int poz = DIM-1;
int N,Q;
inline int nr0(int w){
return ((w^(w-1))&w);
}
void scan(int &VAL)
{
VAL = 0;
while('0' > buff[poz] || buff[poz] >'9')
if(++poz == DIM) fread(buff,1,DIM,stdin),poz=0;
while('0' <= buff[poz] && buff[poz] <= '9')
{
VAL = VAL * 10 + buff[poz] - 48;
if(++poz == DIM) fread(buff,1,DIM,stdin),poz=0;
}
}
class BinaryIndexedTree{
private:
int range[Nmax];
int sum;
public:
void Update(int poz,int _newx){
for(int p = poz; p <= N; p += nr0(p))
range[p] += _newx;
}
int Sum(int pos)
{
sum = 0;
for(int p = pos; p; p -= nr0(p))
sum += range[p];
return sum;
}
};
BinaryIndexedTree Aib;
int main()
{
freopen("datorii.in","r",stdin);
freopen("datorii.out","w",stdout);
scan(N);
scan(Q);
int x,op,a,b;
for(int i = 1; i <= N; ++i){
scan(x);
Aib.Update(i,x);
}
for(int i = 1; i <= Q; ++i)
{
scan(op),scan(a),scan(b);
if(op == 0)
Aib.Update(a,-b);
else
printf("%d\n",Aib.Sum(b)-Aib.Sum(a-1));
}
return 0;
}