Cod sursa(job #97076)

Utilizator andrei.12Andrei Parvu andrei.12 Data 4 noiembrie 2007 23:28:48
Problema Secventa Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include<stdio.h>
int n, k, i, first, last, max, p1, p2, x, nr, t;
char s[2500000];
struct deque{
	int v, i;
};
deque q[500005];
int main()
{
	freopen("secventa.in", "rt", stdin);
	freopen("secventa.out", "wt", stdout);
	scanf("%d%d\n", &n, &k);
	fgets(s, 2500000, stdin), nr = 0;
	if (s[nr] == '-'){
		nr ++;
		t = 1;
	}
	for (; s[nr] >= '0' && s[nr] <= '9'; nr++)
		x = x*10+s[nr]-'0';
	if (t == 1){
		t = 0;
		x = -x;
	}
	q[1].v = x;
	q[1].i = 1;
	first = 1;
	last = 1;
	max = -30001;
	for (i=2; i<=n; i++){
		x = 0, nr ++;
		if (s[nr] == '-'){
			nr ++;
			t = 1;
		}
		for (; s[nr] >= '0' && s[nr] <= '9'; nr++)
			x = x*10+(s[nr]-'0');
		if (t == 1){
			t = 0;
			x = -x;
		}
		while (first <= last && i-q[first].i >= k)
			first ++;
		while (first <= last && x <= q[last].v)
			last --;
		q[++last].v = x;
		q[last].i = i;
		if (q[first].v > max && i-k+1 > 0){
			max = q[first].v;
			p1 = i-k+1;
			p2 = i;
		}
	}
	printf("%d %d %d\n", p1, p2, max);
	fclose(stdin);
	fclose(stdout);
	return 0;
}