Cod sursa(job #2072334)

Utilizator copanelTudor Roman copanel Data 21 noiembrie 2017 19:06:09
Problema Cautare binara Scor 0
Compilator c Status done
Runda Arhiva educationala Marime 0.81 kb
/* ( ‘_>’) */
#include <stdio.h>

#define L 13

int v[30001];

int main() {
	FILE *fin, *fout;
	int n, t, i, k, x, pas, r;

	fin = fopen("br.in", "r");
	fscanf(fin, "%d%d", &n, &t);
	for (i = 1; i <= n; i++) {
		fscanf(fin, "%d", &v[i]);
		v[i] += v[i - 1];
	}
	fseek(fin, 0, SEEK_SET);
	fscanf(fin, "%d%d", &n, &t);
	for (i = n + 1; i <= 2 * n; i++) {
		fscanf(fin, "%d", &v[i]);
		v[i] += v[i - 1];
	}

	fout = fopen("br.out", "w");
	for (i = 1; i <= t; i++) {
		fscanf(fin, "%d%d", &k, &x);
		pas = 1 << L;
		r = k;
		while (pas != 0 && r - k + 1 <= n) {
			if (r + pas <= 2 * n && v[r + pas] - v[k - 1] <= x)
				r += pas;
			pas >>= 1;
		}
		if (r - k + 1 > n)
			r = k + n - 1;
		if (v[r] - v[k - 1] <= x)
			fprintf(fout, "%d\n", r - k + 1);
		else
			fprintf(fout, "0\n");
	}
	fclose(fout);
	fclose(fin);

	return 0;
}