Pagini recente » Cod sursa (job #2890607) | Cod sursa (job #3180620) | Cod sursa (job #710994) | Cod sursa (job #1957655) | Cod sursa (job #3159885)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("datorii.in");
ofstream fout("datorii.out");
const int NAint=1<<16;
int n;
int aint[NAint];
void buildAint(int node=0, int st=1, int dr=n)
{
if(st==dr)
{
fin>>aint[node];
return;
}
int mij=(st+dr)/2;
buildAint(2*node+1, st, mij);
buildAint(2*node+2, mij+1, dr);
aint[node]=aint[2*node+1]+aint[2*node+2];
}
void updateAint(const int& pos, const int& dif, int node=0, int st=1, int dr=n)
{
if(pos<st || dr<pos)
return;
aint[node]-=dif;
if(st==dr)
return;
int mij=(st+dr)/2;
updateAint(pos, dif, 2*node+1, st, mij);
updateAint(pos, dif, 2*node+2, mij+1, dr);
}
int queryAint(const int& qst, const int& qdr, int node=0, int st=1, int dr=n)
{
if(dr<qst || qdr<st)
return 0;
if(qst<=st && dr<=qdr)
return aint[node];
int mij=(st+dr)/2;
return queryAint(qst, qdr, 2*node+1, st, mij)+queryAint(qst, qdr, 2*node+2, mij+1, dr);
}
int main()
{
int m;
fin>>n>>m;
buildAint();
for(int q=1; q<=m; q++)
{
int C,a,b;
fin>>C>>a>>b;
if(C==0)
{
updateAint(a, b);
}
else
{
fout<<queryAint(a, b)<<'\n';
}
}
return 0;
}