Pagini recente » Monitorul de evaluare | Cod sursa (job #323128) | Cod sursa (job #512208) | Cod sursa (job #126354) | Cod sursa (job #1498896)
#include <iostream>
#include <fstream>
#define NMAX 1503
#define NN 1 << 11
using namespace std;
ifstream in("datorii.in");
ofstream out("datorii.out");
int n,m,v[NMAX],intervale[NN],val,poz,t,a,b,sum;//aib[NMAX];
void citire()
{
in >> n >> m;
for(int i=1;i<=n;i++)
in >> v[i];
}
void updateI(int nod,int st, int dr)
{
int mij;
if(st==dr)
{
intervale[nod] = intervale[nod] + val;
return;
}
mij = (st+dr)/2;
if(poz<=mij)
{
updateI(nod*2,st,mij);
}
else if(poz>mij)
{
updateI(nod*2+1,mij+1,dr);
}
intervale[nod] = intervale[nod*2]+intervale[2*nod+1];
}
void getsumI(int nod,int st,int dr)
{
int mij;
if(a<=st && dr<=b)
{
sum = sum + intervale[nod];
return;
}
mij = (st+dr)/2;
if(mij>=a) getsumI(nod*2,st,mij);
if(mij<b) getsumI(nod*2+1,mij+1,dr);
}
int main()
{
citire();
for(int i=1;i<=n;i++)
{
poz = i;
val = v[i];
updateI(1,1,n);
}
// for(int i=1;i<=13;i++)
//{
// cout << i << " " << intervale[i] << endl;
// }
for(int i=0;i<m;i++)
{
in>> t >> a >> b;
if(t==0)
{
poz = a;
val = (-1)*b;
updateI(1,1,n);
}
else
{
sum = 0;
getsumI(1,1,n);
out << sum << "\n";
}
}
return 0;
}