Pagini recente » Cod sursa (job #1851453) | Istoria paginii utilizator/petradutu | Cod sursa (job #2040728) | Cod sursa (job #235044) | Cod sursa (job #352719)
Cod sursa(job #352719)
#include <fstream>
#define MaxN 15050
#define fs(x) ((x)*2)
#define fd(x) ((x)*2+1)
using namespace std;
long N,M,arb[4*MaxN],pos,val,i,op,a,b,S;
void Update(long nod,long st,long dr)
{
if(st==dr)
{
arb[nod]+=val;
return;
}
long div=(st+dr)/2;
if(pos<=div)
Update(fs(nod),st,div);
else
Update(fd(nod),div+1,dr);
arb[nod]=arb[fs(nod)]+arb[fd(nod)];
}
void Query(long nod,long st,long dr)
{
if(st>=a && dr<=b)
{
S+=arb[nod];
return;
}
long div=(st+dr)/2;
if(a<=div)
Query(fs(nod),st,div);
if(div<b)
Query(fd(nod),div+1,dr);
}
int main()
{
ifstream fin("datorii.in");
ofstream fout("datorii.out");
fin>>N>>M;
for(i=1;i<=N;i++)
{
fin>>val;
pos=i;
Update(1,1,N);
}
for(i=1;i<=M;i++)
{
fin>>op>>a>>b;
if(op)
{
S=0;
Query(1,1,N);
fout<<S<<"\n";
}
else
{
pos=a;
val=-b;
Update(1,1,N);
}
}
fin.close();
fout.close();
return 0;
}