Cod sursa(job #1504274)

Utilizator AndreiIstetulAndrei Andrei AndreiIstetul Data 17 octombrie 2015 16:14:11
Problema Arbori indexati binar Scor 40
Compilator c Status done
Runda Arhiva educationala Marime 1.08 kb
#include <stdio.h>
#include <stdlib.h>

#define MX 100000
#define and &&
#define not !

typedef unsigned uint;

FILE *in, *out;
uint n, m, v[MX], i, j, a, b, s;

int main()
{
	in = fopen("aib.in", "r");
	out = fopen("aib.out", "w");

	fscanf(in, "%u %u\n", &n, &m);

	for (i = 0; i < n; ++i) fscanf(in, "%u", &v[i]);

	for (i = 0; i < m; ++i)
	{
		fscanf(in, "%u", &a);

		switch (a)
		{
		case 0:
		{
			fscanf(in, "%u %u", &a, &b);
			v[a - 1] += b;
		}
		break;

		case 1:
		{
			fscanf(in, "%u %u", &a, &b);

			s = 0;
			for (j = a - 1; j < b; ++j) s += v[j];

			fprintf(out, "%u\n", s);
		}
		break;

		case 2:
		{
			fscanf(in, "%u", &a);

			s = b = 0;
			for (j = 0; j < n and s <= a; ++j)
            {
                s += v[j];

                if (s == a)
                {
                    fprintf(out, "%u\n", j + 1);
                    b = 1;
                    break;
                }
            }

            if (not b) fprintf(out, "-1\n");
		}
		break;
		}
	}


	fclose(in);
	fclose(out);

	return 0;
}