Pagini recente » Cod sursa (job #1995227) | Cod sursa (job #1647807) | Cod sursa (job #1954284) | Cod sursa (job #2149788) | Cod sursa (job #2999506)
#include <fstream>
using namespace std;
ifstream cin ("datorii.in");
ofstream cout ("datorii.out");
int v[60005];
int a[15005];
int n,m;
int qst,qdr;
int t,val;
void construire (int vf,int st,int dr)
{
if (st == dr)
{
v[vf] = a[st];
return;
}
int mij = (st+dr)/2;
construire(2*vf,st,mij);
construire(2*vf+1,mij+1,dr);
v[vf] = v[2*vf] + v[2*vf+1];
}
void update (int vf,int st,int dr)
{
if (st == dr && qst == st)
{
v[vf] = v[vf] - val;
return;
}
int mij = (st+dr)/2;
if (qst <= mij)
update(2*vf,st,mij);
if (qdr > mij)
update(2*vf+1,mij+1,dr);
int s = 0;
s = s + v[2*vf] + v[2*vf+1];
v[vf] = s;
}
int query (int vf,int st,int dr)
{
if (st >= qst && qdr>=dr)
return v[vf];
int mij = (st+dr)/2;
int s = 0;
if (qst <= mij)
s = s + query(2*vf,st,mij);
if (qdr > mij)
s = s + query(2*vf+1,mij+1,dr);
return s;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin >> n >> m;
int i,j;
for (i=1;i<=n;i++)
cin >> a[i];
construire(1,1,n);
for (i=1;i<=m;i++)
{
int c;
cin >> c;
if (c==0)
{
cin >> t >> val;
qst = qdr = t;
update(1,1,n);
}
else
{
cin >> qst >> qdr;
cout << query(1,1,n) << '\n';
}
}
return 0;
}