Cod sursa(job #2455221)

Utilizator IliesiDanielDaniel IliesiDaniel Data 10 septembrie 2019 23:04:34
Problema Datorii Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.21 kb
// ============================================================================

#include <stdio.h>

// ============================================================================

#define zeros(x) 	((x^(x-1))&x)

// ============================================================================

int 	main (void)
{
	int 	datorii [15002];
	int 	n, m;
	int 	zi, suma;
	int 	tip, i;
	int 	a, b;

	FILE 			*input;
	FILE 			*output;

	input = fopen ("datorii.in", "r");
	output = fopen ("datorii.out", "w");

	fscanf (input, "%d %d", &n, &m);

	zi = 1;
	while (zi <= n)
	{
		fscanf (input, "%d", &suma);

		i = zi;
		while (i <= n)
		{
			datorii [i] += suma;

			i += zeros (i);
		}

		zi++;
	}

	while (m--)
	{
		fscanf (input, "%d %d %d", &tip, &a, &b);

		if (tip == false)
		{
			i = a;
			while (i <= n)
			{
				datorii [i] -= b;

				i += zeros (i);
			}
		}
		else
		{
			suma = 0;

			zi = b;
			while (zi > 0)
			{
				suma += datorii [zi];

				zi -= zeros (zi);
			}

			zi = a - 1;
			while (zi > 0)
			{
				suma -= datorii [zi];

				zi -= zeros (zi);
			}

			fprintf(output, "%d\n", suma);
		}
	}

	fclose (input);
	fclose (output);

	return 0;
}

// ============================================================================