Cod sursa(job #348984)

Utilizator RobybrasovRobert Hangu Robybrasov Data 17 septembrie 2009 18:17:17
Problema Secventa Scor 100
Compilator cpp Status done
Runda info.conc.sept.2 Marime 0.99 kb
//100 puncte cu parsare, 80 fara
#include <cstdio>
#include <cstring>
#include <deque>
#define N 500001
#define M 4194304
#define inf 0x3f3f3f3f

using namespace std;

int V[N];
deque<int> DQ;
deque<int>::iterator it;
char S[M];

int main()
{
    int n,k,i,poz,maxim=-inf,nr,kont=0,p;
	freopen("secventa.in","r",stdin);
	freopen("secventa.out","w",stdout);
    scanf("%d%d\n",&n,&k);
    fgets(S,M,stdin);
    int len=strlen(S);
    for (i=0; i<len; i++)
    {
        nr=0; p=1;
        if (S[i]=='-')
        {
            p=-1;
            i++;
        }
        for (; S[i]>='0' && S[i]<='9'; i++)
            nr=10*nr+S[i]-'0';
        V[++kont]=nr*p;
    }

    for (i=1; i<=n; i++)
    {
        while (!DQ.empty() && V[i]<=V[DQ.back()]) DQ.pop_back();
        DQ.push_back(i);
        if (DQ.front()<=i-k) DQ.pop_front();
        if (i>=k && V[DQ.front()]>maxim)
        {
            maxim=V[DQ.front()];
            poz=i;
        }
    }

    printf("%d %d %d",poz-k+1,poz,maxim);

    return 0;
}