Pagini recente » Cod sursa (job #1956939) | Cod sursa (job #12281) | Cod sursa (job #2441376) | Cod sursa (job #2625176) | Cod sursa (job #2847927)
#include <fstream>
#define N_MAX 15010
using namespace std;
ifstream f("datorii.in");
ofstream g("datorii.out");
int n, m, i, c, x, y, v[N_MAX], tree[4 * N_MAX];
static inline void Build(int nod, int st, int dr)
{
if (st == dr)
{
tree[nod] = v[st];
return;
}
int mij = (st + dr) / 2;
Build(2 * nod, st, mij);
Build(2 * nod + 1, mij + 1, dr);
tree[nod] = tree[2 * nod] + tree[2 * nod + 1];
}
static inline void Update(int nod, int st, int dr)
{
if (st == dr)
{
tree[nod] = v[st];
return;
}
int mij = (st + dr) / 2;
if (x <= mij)
Update(2 * nod, st, mij);
else
Update(2 * nod + 1, mij + 1, dr);
tree[nod] = tree[2 * nod] + tree[2 * nod + 1];
}
static inline int Query(int nod, int st, int dr)
{
if (x <= st && dr <= y)
return tree[nod];
int mij = (st + dr) / 2;
if (mij >= y)
return Query(2 * nod, st, mij);
if (mij < x)
return Query(2 * nod + 1, mij + 1, dr);
return Query(2 * nod, st, mij) + Query(2 * nod + 1, mij + 1, dr);
}
int main()
{
ios::sync_with_stdio(false);
f.tie(0), g.tie(0);
f >> n >> m;
for (i = 1; i <= n; ++i)
f >> v[i];
Build(1, 1, n);
for (i = 1; i <= m; ++i)
{
f >> c >> x >> y;
if (c == 0)
{
v[x] -= y;
Update(1, 1, n);
}
else
g << Query(1, 1, n) << '\n';
}
return 0;
}