Cod sursa(job #2412744)

Utilizator LuscanAlexLuscan Alexandru LuscanAlex Data 22 aprilie 2019 15:20:01
Problema Secventa Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.46 kb
#include <fstream>
#include <iostream>
#include<deque>
using namespace std;

ifstream fin("secventa.in");
ofstream fout("secventa.out");

void read();
void write();

deque<pair<int, int> > deq;
int n, k;
int p, v;
void Get(int &x);

int main()
{

	read();
	write();
	return 0;
}

void read()
{
	Get(n); Get(k);
//	cout << "n = " << n << " k = " << k; cin.get();
	int i, aux;
	for (i = 1; i <= k; ++i)
	{
		Get(aux);
//		cout << aux; cin.get();
		while (!deq.empty() && deq.front().first > aux)
			deq.pop_front();

		deq.push_front(make_pair(aux, i));
	}
	v = deq.back().first;
	p = k;
	for (i = k + 1; i <= n; ++i) {
		if (i - deq.back().second >= k)
			deq.pop_back();

		Get(aux);
	//	cout << aux; cin.get();
		while (!deq.empty() && deq.front().first > aux)
			deq.pop_front();

		deq.push_front(make_pair(aux, i));

		if (deq.back().first > v || (deq.back().first == v && i > p))
		{
			v = deq.back().first;
			p = i;
		}
	}

}

void write()
{
	fout << p - k + 1 << ' ' <<  p << ' ' << v;
}

const int Lim = 100000;
int p1 =  Lim - 1;
char s[Lim];

void Next()
{
    if (++p1 == Lim)
        fin.get(s, Lim + 1, EOF), p1 = 0;
}

void Get(int &x)
{
	while (s[p1] < '0' || s[p1] > '9')
	{
		if (s[p1] == '-')
			break;
		Next();
	}

	int sgn = 1;
	if (s[p1] == '-')
	{
		sgn = -1;
		Next();
	}

    for (x = 0; s[p1] >= '0' && s[p1] <= '9'; Next())
        x = x * 10 + s[p1] - '0';
    x *= sgn;
}