Pagini recente » Cod sursa (job #1466652) | Cod sursa (job #2726953) | Cod sursa (job #1370058) | Cod sursa (job #214665) | Cod sursa (job #2835099)
#include <iostream>
#include <fstream>
using namespace std;
int aint[500005], n, p=1;
void up(int i, int val)
{
int poz=p-1+i;
aint[poz]=aint[poz]-val;
while(poz>1)
{
poz/=2;
aint[poz]=aint[poz*2]+aint[poz*2+1];
}
}
int query(int ind, int csta, int cdra, int cstq, int cdrq)
{
if(cstq<=csta && cdra<=cdrq)
return aint[ind];
else
{
int aux=0;
if(cstq<=((csta+cdra)/2))
aux+=query(ind*2, csta, (csta+cdra)/2, cstq, cdrq );
if(cdrq>((csta+cdra)/2))
aux+=query(ind*2+1, (csta+cdra)/2+1, cdra, cstq, cdrq );
return aux;
}
}
int main()
{
ifstream cin ("datorii.in");
ofstream cout ("datorii.out");
int m, c, a, b, aux, t;
cin>>n>>m;
p=1;
while(p<n)
{
p=p*2;
}
for(int i=p; i<=p+n-1; i++)
{
cin>>aint[i];
}
for(int i=p+n; i<=p*2; i++)
{
aint[i]=0;
}
for(int i=p-1; i>=1; i--)
{
aint[i]=aint[i*2]+aint[i*2+1];
}
for(int i=0; i<m; i++)
{
cin>>c>>a>>b;
if(c==1) cout<<query(1, 1, p, a, b)<<'\n';
else up(a, b);
}
return 0;
}