Pagini recente » Borderou de evaluare (job #178081) | Cod sursa (job #351403) | Cod sursa (job #3165493) | Cod sursa (job #2509523) | Cod sursa (job #1120105)
//http://www.infoarena.ro/problema/datorii
#include<fstream>
#define Nmax 15010
#define lsb(x) (x & -x)
using namespace std;
ifstream f("datorii.in");
ofstream g("datorii.out");
int N, M, AIB[Nmax];
void update(int x, int val)
{
for (int i = x; i <= N; i += lsb(i))
AIB[i] += val;
}
int query(int x)
{
int res=0;
for (int i = x; i; i -= lsb(i))
res += AIB[i];
return res;
}
int main()
{
int op, a, b, i;
f >> N >> M;
for (i = 1; i <= N; ++i)
{
f >> a;
update(i, a);
}
for (i = 1; i <= M; ++i)
{
f >> op>>a>>b;
switch (op)
{
case 0: update(a, -b); break;
case 1: g << query(b) - query(a - 1) << '\n'; break;
}
}
f.close();
g.close();
return 0;
}