Cod sursa(job #291913)

Utilizator scvalexAlexandru Scvortov scvalex Data 30 martie 2009 16:09:16
Problema Cuburi2 Scor 20
Compilator c Status done
Runda Arhiva de probleme Marime 0.73 kb
#include <stdio.h>

int A[250001];
int V[250001];
int N;

int main(int argc, char *argv[]) {
	int i, M, x, y, l;
	FILE *fi = fopen("cuburi2.in", "r");
	fscanf(fi, "%d %d", &N, &M);
	for (i = 1; i <= N; ++i)
		fscanf(fi, "%d", A+i);

	for (i = 1; i <= N; ++i)
		V[i] = V[i-1] + A[i];

	FILE *fo = fopen("cuburi2.out", "w");
	while (M--) {
		fscanf(fi, "%d %d", &x, &y);
		for (i=1; i < y-x; i <<= 1)
			;
		l = x;
		for (; i > 0; i >>= 1) {
			//printf("l = %d; i = %d; x = %d; y = %d\n", l, i, x, y);
			//printf("%d | %d\n", V[l+i-1] - V[x-1], V[y] - V[l+i-1]);
			if ((l+i <= y) && (V[l+i-1] - V[x-1] <= V[y] - V[l+i-1]))
				l += i;
			//printf("l = %d\n", l);
		}

		fprintf(fo, "%d 0\n", l);
	}
	fclose(fo);
	fclose(fi);
  
	return 0;
}