Cod sursa(job #1806833)

Utilizator VladG26Ene Vlad-Mihai VladG26 Data 15 noiembrie 2016 18:36:18
Problema Secventa Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.4 kb
#include <iostream>
#include <deque>
#include <cstdio>
using namespace std;
int n,k,mCit[500001];
char cit[3500001];
deque <int> coada;
int getNumber(int st,int dr)
{
    int nr=0,semn=1;
    if(cit[st]=='-')
    {
        semn=-1;
        st+=1;
    }
    for(int i=st;i<=dr;i++)
    {
        nr+=cit[st]-'0';
        nr*10;
    }
    return semn*nr;
}
void citParsata()
{
    int j=0;
    for(int i=1; i<=2*n-1; i++)
    {
        int iInitial=i;
        while(cit[i]!=' ')
            i++;
        mCit[++j]=getNumber(iInitial,i-1);
    }

}
void citire()
{
    scanf("%d%d",&n,&k);
    for(int i=1; i<=n; i++)
        fgets(cit,3500001,stdin);
    citParsata();
}
void stergere(int x)
{
    while(!coada.empty()&&mCit[coada.back()]>mCit[x])
        coada.pop_back();
}
void solve()
{
    for(int i=1; i<k; i++)
    {
        stergere(i);
        coada.push_back(i);
    }
    int minim=-0x3f3f3f,iMin;
    for(int i=k; i<=n; i++)
    {
        stergere(i);
        coada.push_back(i);
        if(i-coada.front()==k)
            coada.pop_front();
        if(mCit[coada.front()]>minim)
        {
            minim=mCit[coada.front()];
            iMin=i;
        }
    }
    printf("%d %d %d",iMin-k+1,iMin,minim);
}

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

    return 0;
}