Cod sursa(job #1248278)

Utilizator AndreeaBaltaBalta Andreea Cristina AndreeaBalta Data 24 octombrie 2014 20:56:15
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.73 kb
#include <cstdio>

using namespace std;

int aib[15005], n;

inline int lsb(int x)
{
	return x & -x;
}

void update(int poz, int val)
{
	int i;
	for(;poz <= n; poz += lsb(poz))
		aib[poz] += val;
}
int query(int b)
{
	int s= 0;
	for(;b; b-=b & (-b))
		s += aib[b];
	return s;
}

int main()
{
    FILE *in, *out;
    in = fopen("datorii.in", "r");
    out = fopen("datorii.out", "w");
    int m, x, i, op, a, b;
    fscanf(in, "%d%d", &n, &m);
    for(i = 1; i <= n; i++)
    {
    	fscanf(in, "%d", &x);
    	update(i,x);
    }
	for(i = 1; i <= m; i++)
	{
		fscanf(in, "%d%d%d", &op, &a, &b);
		if(op == 0)
			update(a, -b);

		else
			fprintf(out, "%d\n", query(b) - query(a-1));

	}
    return 0;
}