Cod sursa(job #1491901)

Utilizator Alex.PAlexandru Pacurar Alex.P Data 26 septembrie 2015 14:00:08
Problema Secventa Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 1.07 kb
#include <stdio.h>
#include <stdlib.h>

int deck[500000];
int ordine[500000];

int main()
{
    FILE *fin, *fout;
    int n,k,i,j,l,max,poz,x,start;
    fin=fopen("secventa.in","r");
    fout=fopen("secventa.out","w");
    fscanf(fin,"%d%d",&n,&k);
    poz=i=0;
    fscanf(fin,"%d",&deck[0]);
    ordine[0]=0;
    max=deck[0];
    j=1;
    for(i=1;i<k;i++){
        fscanf(fin,"%d",&x);
        while(x<deck[j-1] && j>=1)
            j--;
        deck[j]=x;
        ordine[j]=i;
        j++;
        if(max<deck[0])
            max=deck[0];
    }
    start=0;
    for(i;i<n;i++){
        fscanf(fin,"%d",&x);
        if(ordine[start]==i-k)
            start++;
        while(x<deck[j-1] && j>=start+1)
            j--;
        deck[j]=x;
        ordine[j]=i;
        j++;
        if(max<deck[start]){
            max=deck[start];
            poz=i-k+1;
        }
    }
    if(max<deck[start]){
        max=deck[start];
        poz=i-k+1;
    }
    fprintf(fout,"%d %d %d",poz+1,poz+k,max);
    fclose(fin);
    fclose(fout);
    return 0;
}