Cod sursa(job #1801836)

Utilizator SolcanMihaiSolcan Mihai Andrei SolcanMihai Data 9 noiembrie 2016 17:30:03
Problema Secventa Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 kb
#include <iostream>
#include <cstdio>
#include <deque>

using namespace std;

int n, k;
int numere[5000005];
long long rezFinal = 0;
deque<int> Q;
int x, y;

void citire()
{
	scanf("%d %d", &n, &k);

	for(int i = 0; i < n; i++)
	{
		scanf("%d", &numere[i]);
	}
}

void solve()
{
	long long sum = 0;

	for(int i = 0; i < k - 1; i++)
	{
		while(!Q.empty() && numere[Q.back()] > numere[i])
		{
            Q.pop_back();
		}

		Q.push_back(i);
	}

	for(int i = k - 1; i < n; i++)
    {
        while(!Q.empty() && numere[Q.back()] > numere[i])
		{
            Q.pop_back();
		}

		Q.push_back(i);

		if(i - Q.front() >= k)
        {
            Q.pop_front();
        }

        sum = numere[Q.front()] * 1LL;

        if(rezFinal < sum)
        {
            rezFinal = sum;
            x = Q.front();
            y = i;
        }
    }
}

int main()
{
	freopen("secventa.in", "r", stdin);
	freopen("secventa.out", "w", stdout);

	citire();
    solve();


    printf("%d %d %lld", x + 1, y + 1, rezFinal);

	return 0;
}