Pagini recente » Cod sursa (job #2584079) | Cod sursa (job #153295) | Cod sursa (job #248724) | Cod sursa (job #2392133) | Cod sursa (job #1507963)
#include <iostream>
#include <fstream>
#include <algorithm>
#define nmax 15005
using namespace std;
int A,B;
int Poz,Val,X;
int Arb[nmax*4];
int n,m,maxim;
void Update(int n,int left,int right)
{
if(left==right)
{
Arb[n]=Arb[n]-B;
return;
}
int mij=(left+right)/2;
if(Poz<=mij)
Update(2*n,left,mij);
else Update(2*n+1,mij+1,right);
Arb[n]=Arb[2*n]+Arb[2*n+1];
}
void Query(int n,int left,int right)
{
if(A<=left && right<=B)
{
maxim+=Arb[n];
return;
}
int mij=(left+right)/2;
if(A<=mij)
Query(2*n,left,mij);
if(B>mij)
Query(2*n+1,mij+1,right);
}
int main()
{
freopen("datorii.in","r",stdin);
freopen("datorii.out","w",stdout);
scanf("%d %d",&n,&m);
for(int i=1;i<=n;i++)
{
scanf("%d ",&X);
Poz=i;
B=-X;
Update(1,1,n);
}
for(int i=1;i<=m;i++)
{
scanf("%d %d %d",&X,&A,&B);
if(X==0)
{
Poz=A;
Update(1,1,n);
}
else
{
maxim=0;
Query(1,1,n);
printf("%d\n",maxim);
}
}
return 0;
}