Pagini recente » Cod sursa (job #174779) | Cod sursa (job #1736951) | Cod sursa (job #353228) | Cod sursa (job #1352056) | Cod sursa (job #832830)
Cod sursa(job #832830)
#include <fstream>
#include <iostream>
using namespace std;
int arb[400000];
int v[100000];
int n,m,val,pos,a,b;
int l,r;
int max1;
ifstream in("datorii.in");
ofstream out("datorii.out");
void actualizeaza(int st, int dr, int nod)
{
if (st==dr)
{
arb[nod]=val;
return;
}
else
{
int mij=(st+dr)/2;
if (pos<=mij)
actualizeaza(st,mij,2*nod);
else
actualizeaza(mij+1,dr,2*nod+1);
arb[nod]=arb[2*nod]+arb[2*nod+1];
}
}
void intreaba(int st, int dr, int nod)
{
if ( (l<=st) && (dr<=r) )
{
max1+=arb[nod];
return ;
}
else
{
int mij=(st+dr)/2;
if (l<=mij)
intreaba(st,mij,2*nod);
if (r>mij)
intreaba(mij+1,dr,2*nod+1);
}
}
int main()
{
in>>n;
in>>m;
int i;
for (i=1;i<=n;i++)
{
in>>val;
pos=i;
v[i]=val;
actualizeaza(1,n,1);
}
int t;
while (m)
{
in>>t>>a>>b;
if (t==0)
{
pos=a;
v[pos]=v[pos]-b;
val=v[pos];
actualizeaza(1,n,1);
/*for (i=1;i<=2*n;i++) out<<arb[i]<<' ';
out<<'\n';*/
}
else
{ max1=0;
l=a;
r=b;
intreaba(1,n,1);
out<<max1<<"\n";
}
m--;
}
return 0;
}