Pagini recente » Cod sursa (job #853260) | Cod sursa (job #2124146) | Cod sursa (job #2765961) | Cod sursa (job #2554743) | Cod sursa (job #2421756)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("datorii.in");
ofstream fout("datorii.out");
int a[200001],aa,bb,pos,val;
inline int arata(int nod,int st,int dr)
{
if(aa<=st && dr<=bb)
return a[nod];
int m=(st+dr)/2,m1=0,m2=0;
if(aa<=m)
m1=arata(2*nod,st,m);
if(bb>m)
m2=arata(2*nod+1,m+1,dr);
return m1+m2;
}
inline void schimba(int nod,int st,int dr)
{
if(st==dr) {a[nod]-=val;return;}
int m=(st+dr)/2;
if(pos<=m)
schimba(2*nod,st,m);
else
schimba(2*nod+1,m+1,dr);
a[nod]=a[2*nod]+a[2*nod+1];
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
int n,m,x;
fin>>n>>m;
for(int i=1;i<=n;i++)
{
fin>>val;
val=-val;
pos=i;
schimba(1,1,n);
}
for(int i=1;i<=m;i++)
{
fin>>x;
if(x==1)
{
fin>>aa>>bb;
fout<<arata(1,1,n)<<'\n';
}
else
{
fin>>pos>>val;
schimba(1,1,n);
}
}
}