Pagini recente » Cod sursa (job #1500067) | Cod sursa (job #2877814) | Cod sursa (job #285958) | Cod sursa (job #484946) | Cod sursa (job #1146247)
#include <fstream>
#define NMAX 30005
using namespace std;
FILE* f=freopen("datorii.in","r",stdin);
FILE* o=freopen("datorii.out","w",stdout);
int n;
int a,b;
int tree[NMAX];
int sum;
void Update(int nod, int left, int right)
{
int mj=left+(right-left)/2;
if(left==right)
tree[nod]-=b;
else {
if(mj>=a)
Update(2*nod,left,mj);
else
Update(2*nod+1,mj+1,right);
tree[nod]=tree[nod*2]+tree[nod*2+1];
}
}
void Ask(int nod, int left, int right)
{
int mj=left+(right-left)/2;
if(left>=a&&right<=b) {
sum+=tree[nod];
}
else {
if(mj<b)
Ask(2*nod+1,mj+1,right);
if(mj>=a)
Ask(2*nod,left,mj);
}
}
int main()
{
int m;
scanf("%d%d",&n,&m);
for(int i=1;i<=n;++i)
{
a=i;
scanf("%d",&b);
b=-b;
Update(1,1,n);
}
for(int i=0;i<m;++i)
{
int act;
scanf("%d%d%d",&act,&a,&b);
if(!act)
Update(1,1,n);
else {
sum=0;
Ask(1,1,n);
printf("%d\n",sum);
}
}
return 0;
}