Cod sursa(job #1551162)

Utilizator krityxAdrian Buzea krityx Data 15 decembrie 2015 11:23:04
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <fstream>
#include <vector>
#include <cstdio>
#define MAXN 15001
using namespace std;

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

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

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

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);
	vector<int> bit(N + 1,0);
	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;
}