Pagini recente » Cod sursa (job #1396503) | Cod sursa (job #1467168) | Cod sursa (job #1002357) | Cod sursa (job #920189) | Cod sursa (job #291326)
Cod sursa(job #291326)
#include <fstream>
using namespace std;
ofstream ofis("datorii.out");
ifstream ifis("datorii.in");
#define mmax 10001
long n,m,i,x,t,v,p,q,start,finish,sum,val,pos,arb[2*mmax+66],a[16000];
void update(int,int,int);
void query(int,int,int);
int main()
{
ifis>>n>>m;
for (i=1; i<=n; i++)
{ifis>>x; a[i]=x; val=x; pos=i; update(1,1,n);}
for (i=1; i<=m; i++)
{
ifis>>x;
if(x==0)
{ifis>>q>>p; a[q]-=p; val=a[q]; pos=q; update(1,1,n);}
else
{
ifis>>t>>v;
sum=0; start=t; finish=v;
query(1,1,n); ofis<<sum<<"\n";}
}
return 0;
}
void update (int nod, int left, int right)
{
if (left==right)
{ arb[nod]=val; return;}
int div=(left+right)/2;
if (pos<=div) update(2*nod,left,div);
else update(2*nod+1,div+1,right);
arb[nod]=arb[2*nod]+arb[2*nod+1];
}
void query(int nod, int left, int right)
{
if (start<=left && finish>=right)
{sum+=arb[nod]; return;}
int div=(left+right)/2;
if (start<=div) query(2*nod,left,div);
if (div<finish) query(2*nod+1,div+1,right);
}