Pagini recente » Cod sursa (job #1113735) | Cod sursa (job #136962) | Cod sursa (job #609300) | Cod sursa (job #1696633) | Cod sursa (job #1764461)
#include <cstdio>
using namespace std;
int n, m;
class ArboreIndexatBinar
{
private:
int aib[15050];
int gasirePutere(int x)
{
return ((x ^ (x - 1)) & x);
}
int sum(int x)
{
int suma = 0;
for(int k = x; k >= 1; k -= gasirePutere(k))
{
suma += aib[k];
}
return suma;
}
public:
void citire()
{
scanf("%d %d", &n, &m);
for(int i = 1; i <= n; i++)
{
int tmp;
scanf("%d", &tmp);
for(int k = i; k <= n; k += gasirePutere(k))
{
aib[k] += tmp;
}
}
}
void achitare(int zi, int valoare)
{
for(int k = zi; k <= n; k += gasirePutere(k))
{
aib[k] -= valoare;
}
}
int interogare(int st, int dr)
{
return sum(dr) - sum(st - 1);
}
};
int main()
{
freopen("datorii.in", "r", stdin);
freopen("datorii.out", "w", stdout);
ArboreIndexatBinar arb;
arb.citire();
int opt;
int par1, par2;
for(int i = 0; i < n; i++)
{
scanf("%d %d %d", &opt, &par1, &par2);
switch(opt)
{
case 0:
arb.achitare(par1, par2);
break;
case 1:
printf("%d\n", arb.interogare(par1, par2));
break;
}
}
return 0;
}