Pagini recente » Cod sursa (job #2583744) | Cod sursa (job #402889) | Profil razvanboabes | Cod sursa (job #1650693) | Cod sursa (job #3171768)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in ("datorii.in");
ofstream out ("datorii.out");
#define MAX_N 32768 //2^something
#define half 16384
int aint[MAX_N];
void build()
{
for(int i = MAX_N - 1; i > 0; --i)
{
aint[i/2] += aint[i];
}
}
void update(int node, int diff)
{
aint[node] -= diff;
if(node != 1)
update(node/2, diff);
}
int querry(const int& p, const int& q, int st, int dr, int node)
{
if(p <= st && q >= dr)
return aint[node];
int mid = (st + dr) / 2;
int ans = 0;
if(p <= mid)
ans += querry(p, q, st, mid, node * 2);
if(mid < q)
ans += querry(p, q, mid+1, dr, node * 2 + 1);
return ans;
}
int main()
{
int n, m, c, x, a, b;
in >> n >> m;
for(int i = 0; i < n; ++i)
{
in >> aint[half + i];
}
build();
for(int i = 0; i < m; ++i)
{
in >> c >> a >> b;
if(c == 0) update(half + a - 1, b);
else out << querry(a, b, 1, half, 1) << '\n';
}
return 0;
}