Cod sursa(job #2046304)

Utilizator IsacLucianIsac Lucian IsacLucian Data 23 octombrie 2017 17:58:44
Problema Secventa Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.27 kb
#include <bits/stdc++.h>

using namespace std;

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

int n,k,a[500002];
char aux[3500002];
deque<int>d;

void Citire()
{
    int i,lg,semn,nr;
    fin>>n>>k;
    fin.get();
    fin.getline(aux,3500002);

    semn=lg=1;
    for(i=0;aux[i]!=0;)
    {
        if('0'<=aux[i] && aux[i]<='9')
        {
            nr=0;
            while('0'<=aux[i] && aux[i]<='9')
            {
                nr=nr*10+aux[i]-'0';
                i++;
            }
            nr*=semn;
            semn=1;

            a[lg]=nr;
            lg++;
        }
        else if(aux[i]=='-')
        {
            i++;
            semn=-1;
        }
        else i++;
    }

}

void Rezolva()
{
    int i,maxim,poz;

    maxim=-30002;poz=0;
    for(i=1;i<=n;i++)
    {
        while(!d.empty() && a[d.back()]>=a[i])
            d.pop_back();

        d.push_back(i);

        if(i-k==d.front())d.pop_front();

        if(i>=k)
        {
            if(maxim<a[d.front()])
            {
                maxim=a[d.front()];
                poz=i;
            }
        }

    }
    fout<<poz-k+1<<" "<<poz<<" "<<maxim<<"\n";
}

int main()
{
    Citire();
    Rezolva();
    return 0;
}