Cod sursa(job #172006)

Utilizator bogdanhm999Casu-Pop Bogdan bogdanhm999 Data 5 aprilie 2008 16:49:33
Problema Secventa Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.26 kb
#include<stdio.h>
#include<string>
#define MAXN 500001   
  
long pA,pB,REZ=-40000,N,q,M,L,V[MAXN],deque[MAXN];   
long poz[MAXN];   
char buffer[8*500005];
  
void citesteDate(){   
     long i,nr=0;
     freopen("secventa.in","r",stdin);
     freopen("secventa.out","w",stdout);    
     scanf("%ld %ld\n",&N,&L);
     gets(buffer);
     M=strlen(buffer);
     for (i=0;i<M;++i){
         if (buffer[i]==' '){V[++q]=nr;nr=0;continue;}
         //while (buffer[i]==' ')i++;
         if (buffer[i]=='-'){nr=-(buffer[i+1]-'0');i++;continue;}
         else {nr*=10;nr+=buffer[i]-'0';}
     }
     if (q==N)while(1);
     /*
     for (i=1;i<=N;i++)
         printf("%ld ",V[i]);
     printf("\n");
     */
     fclose(stdin);
}   
void proceseaza(){   
     long i,s1=1,s2=0;   
     for (i=1;i<=N;i++){   
         while (s1<=s2 && deque[s2]>V[i]) s2--;   
         s2++;   
         deque[s2]=V[i];   
         poz[s2]=i;   
         while (s1<=s2 && i-poz[s1]>=L) s1++;    
         if (i>=L)
            if (REZ<deque[s1]){REZ=deque[s1];pB=i;}   
    }   
}   
void afiseazaRez(){   
       
     printf("%ld %ld %ld\n",pB-L+1,pB,REZ);   
}   
int main(){   
    citesteDate();   
    proceseaza();   
    afiseazaRez();   
return 0;   
}