Cod sursa(job #1551164)

Utilizator krityxAdrian Buzea krityx Data 15 decembrie 2015 11:25:41
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <cstdio>
#define MAXN 15001
using namespace std;

int zeroes(int x)
{
	return (x ^ (x - 1)) & x;
}

void Update(int BIT[], int N, int index, int value)
{
	for (int i = index; i <= N; i += zeroes(i))
	{
		BIT[i] += value;
	}
}

int Query(int BIT[], int N, int x)
{
	int sum = 0;
	for (int i = x; i > 0; i -= zeroes(i))
	{
		sum += BIT[i];
	}
	return sum;
}

int bit[MAXN];

int main()
{
	FILE *fin = fopen("datorii.in", "r");
	FILE *fout = fopen("datorii.out", "w");
	int N, M, i, a, b, c;
	fscanf(fin, "%d%d", &N, &M);
	
	for (i = 1; i <= N; i++)
	{
		fscanf(fin, "%d", &a);
		Update(bit, N, i, a);
	}
	for (i = 1; i <= M; i++)
	{
		fscanf(fin, "%d%d%d", &a, &b, &c);
		if (a == 1)
		{
			fprintf(fout, "%d\n", Query(bit, N, c) - Query(bit, N, b - 1));
		}
		else
		{
			Update(bit, N, b, -c);
		}
	}
	return 0;
}