Pagini recente » Cod sursa (job #749455) | Cod sursa (job #1492305) | Cod sursa (job #2634862) | Cod sursa (job #2275908) | Cod sursa (job #1895028)
#include <fstream>
#define nmax 15050
using namespace std;
ifstream fin("datorii.in");
ofstream fout("datorii.out");
int Narb,aint[4*nmax];
inline void change(int p,int x)
{ int t;
p+=Narb-1;
aint[p]-=x;
while(p>0)
{ if(p%2==1) p--;
t=p/2;
aint[t]=aint[p]+aint[p+1];
p=t;
}
}
inline int Query(int p,int x,int y,int st,int dr)
{
if(x==st && y==dr) return aint[p];
int mij=(st+dr)/2;
if(y<=mij)
return Query(2*p,x,y,st,mij);
if(x>mij)
return Query(2*p+1,x,y,mij+1,dr);
return Query(2*p,x,mij,st,mij) + Query (2*p+1,mij+1,y,mij+1,dr) ;
}
int main()
{ int n,i,q,op,x,y;
fin>>n>>q;
Narb=1;
while(Narb<n) Narb*=2;
for(i=1;i<=n;++i)
fin>>aint[Narb+i-1];
for(i=Narb-1;i>=1;i--)
aint[i]=aint[i*2]+aint[i*2+1];
for(i=1;i<=q;++i)
{ fin>>op>>x>>y;
if(op==1)
fout<<Query(1,x,y,1,Narb)<<"\n";
else change(x,y);
}
return 0;
}