Cod sursa(job #1598433)

Utilizator petrooPetru G petroo Data 12 februarie 2016 21:55:51
Problema Secventa Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.3 kb
#include <stdio.h>
#include <stdlib.h>
#define MAX 500001

int  Vector[MAX],Deque[MAX];
char * buffer;

void read (int &x)
 {
    x = 0;
    bool semn=0;
    while (*(buffer) < '0' || *(buffer) > '9' )
        if(*(buffer++) == '-')
           semn = 1;
    while(*(buffer) >= '0' && *(buffer) <= '9')
        x = x * 10 + *(buffer++) - '0';

    if(semn)
        x *= (-1);
}



int main(void)
{

    int numar=-30001,head=1,tail=0,N,K,i,poz_inceput=-30001,poz_terminat=0 , dimensiune;

    freopen("secventa.in","r",stdin);
    freopen("secventa.out","w",stdout);
    fseek(stdin,0,SEEK_END);
    dimensiune = ftell(stdin);
    buffer = (char *)(malloc(dimensiune));
    rewind(stdin);
    fread(buffer,1,dimensiune,stdin);
    read(N);
    read(K);
    for ( i = 1 ; i <= N ; i++)
        read(Vector[i]);
    for ( i = 1 ; i <= N ; i++)
    {
        while(head <= tail && Vector[i] <= Vector[Deque[tail]])
            --tail;
        Deque[++tail] = i;
        if(i-K == Deque[head])
            head++;
        if(i >= K && numar < Vector[Deque[head]])
        {

                numar = Vector[Deque[head]];
                poz_inceput= i-K+1;
                poz_terminat=i;
        }

    }
    printf("%d %d %d\n",poz_inceput,poz_terminat,numar);

    return 0;

}