Pagini recente » Cod sursa (job #1640002) | Cod sursa (job #970322) | Cod sursa (job #2727754) | Cod sursa (job #2607459) | Cod sursa (job #1703104)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("datorii.in");
ofstream g("datorii.out");
#define MAXN 15000
int N,M;
int Arb[4*MAXN+50]={};
int val, poz, suma=0, start, stop;
void afisare_arb()
{
for(int i=1; i<=20; ++i)
{
cout<<Arb[i]<<" ";
}
cout<<"\n";
}
void update(int n, int st, int dr)
{
if(st==dr)
{
Arb[n]+=val;
return;
}
else
{
int m=(st+dr)/2;
if(poz<=m)
update(2*n, st, m);
else
update(2*n+1,m+1,dr);
Arb[n]=Arb[2*n]+Arb[2*n+1];
}
}
int query(int x, int st, int dr)
{
if(start<=st && dr<=stop)
{
return Arb[x];
}
int m=(st+dr)/2, mid=(start+stop)/2;
if(st<=mid && mid<dr) return query(2*x,st,mid)+query(2*x+1, mid+1, dr);
if(start<=m) return query(2*x,st,m);
if(m<stop) return query(2*x+1, m+1, dr);
}
int main()
{
f>>N>>M;
int x,a,b;
for(int i=1; i<=N; ++i)
{
f>>x;
poz=i;
val=x;
update(1,1,N);
//afisare_arb();
}
for(int i=1; i<=M; ++i)
{
f>>x>>a>>b;
if(x==1)
{
suma=0;
start=a;
stop=b;
g<<query(1,1,N);
g<<"\n";
}
else
{
poz=a;
val=-b;
update(1,1,N);
}
}
return 0;
}