Pagini recente » Cod sursa (job #1614929) | Cod sursa (job #844444) | Cod sursa (job #1894773) | Cod sursa (job #3293196) | Cod sursa (job #2556871)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("datorii.in");
ofstream fout("datorii.out");
int n, m, baza, tree[32000];
void update(int poz, int val)
{
poz+=baza - 1;
tree[poz] -= val;
for(poz/=2; poz; poz/=2)
tree[poz] = tree[poz*2] + tree[poz*2 + 1];
}
int sum(int a, int b)
{
a+=baza - 1;
b+=baza - 1;
int suma = 0;
for(; a<=b; a/=2, b/=2)
{
if(a % 2 == 1)
suma += tree[a], a++;
if(b % 2 == 0)
suma += tree[b], b--;
}
return suma;
}
int main()
{
fin>>n>>m;
baza = pow(2, (int)log2(n) + (log2(n) > (int)log2(n) ? 1 : 0 )) + 0.5;
for(int i=baza; i<= baza + n - 1; i++)
fin>>tree[i];
for(int k = baza/2; k; k/=2)
for(int i = k; i<= k * 2 - 1; i++)
tree[i] = tree[i*2] + tree[i*2+1];
for(int a, b, c, i = 1; i<=m; i++)
{
fin>>c>>a>>b;
if(c == 1)
fout<<sum(a, b)<<'\n';
else
update(a, b);
}
return 0;
}