Pagini recente » Borderou de evaluare (job #1293445) | Cod sursa (job #414389) | Cod sursa (job #688988) | Borderou de evaluare (job #3262097) | Cod sursa (job #2253127)
#include <iostream>
#include <fstream>
using namespace std;
const int maxn = 15e3+3;
ifstream f("datorii.in");
ofstream g("datorii.out");
int n, m, i, x, y, z, logn;
class aib
{
private:
int v[maxn];
public:
void add(int i, int x)
{
while(i <= n) {
v[i] += x;
i += (i & (-i));
}
}
int query(int a, int b)
{
if(a != 1) {
return query(1, b) - query(1, a-1);
}
int log = logn, sum = 0, left = 0;
while(log > 0)
{
if(left + log > n) {
log >>= 1; continue;
}
if(b == left + log) {
return sum + v[left + log];
}
if(b > left + log) {
sum += v[left + log];
left += log;
}
log >>= 1;
}
}
}bt;
int main()
{
f >> n >> m;
for(i = 0; (1 << i) < n; ++i) {}
logn = (1 << i);
for(i = 1; i <= n; i ++)
{
f >> x;
bt.add(i, x);
}
while(m--)
{
f >> x >> y >> z;
if(x == 0) {
bt.add(y, -z);
} else {
g << bt.query(y, z) << '\n';
}
}
f.close();
g.close();
return 0;
}