Cod sursa(job #97071)

Utilizator andrei.12Andrei Parvu andrei.12 Data 4 noiembrie 2007 23:12:13
Problema Secventa Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.71 kb
#include<stdio.h>
int n, k, v[500005], i, first, last, max, p1, p2;
struct deque{
	int v, i;
};
deque q[500005];
int main()
{
	freopen("secventa.in", "rt", stdin);
	freopen("secventa.out", "wt", stdout);
	scanf("%d%d", &n, &k);
	for (i=1; i<=n; i++)
		scanf("%d", &v[i]);
	q[1].v = v[1];
	q[1].i = 1;
	first = 1;
	last = 1;
	max = -30001;
	for (i=2; i<=n; i++){
		while (first <= last && i-q[first].i >= k)
			first ++;
		while (first <= last && v[i] <= q[last].v)
			last --;
		q[++last].v = v[i];
		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;
}