Pagini recente » Cod sursa (job #252049) | Cod sursa (job #1551429) | Cod sursa (job #1788392) | Cod sursa (job #1647216) | Cod sursa (job #3295043)
#include <bits/stdc++.h>
#define NMAX 15001
using namespace std;
int n, m;
int aib[NMAX];
void actualizare(int val, int zi) //actualizeaza arborele indexat binar
{
while(zi<=n)
{
aib[zi]+=val;
zi+=(zi&(-zi));
}
}
int interogare(int zi) //calculeaza suma din intervalul [1, zi]
{
int suma=0;
while(zi>0)
{
suma+=aib[zi];
zi-=(zi&(-zi));
}
return suma;
}
int main()
{
ifstream cin("datorii.in");
ofstream cout("datorii.out");
cin >> n >> m;
for(int i=1; i<=n; i++)
{
int val;
cin >> val;
actualizare(val, i);
}
while(m--)
{
bool cod;
cin >> cod;
if(cod==0) //daca codul este 0
{
int val, zi;
cin >> zi >> val;
actualizare(-val, zi); //actualizam arborele indexat binar
}
else //daca codul este 1
{
int p, q;
cin >> p >> q;
cout << interogare(q)-interogare(p-1) << "\n"; //afisam suma din intervalul [p, q]
}
}
return 0;
}