Cod sursa(job #179006)

Utilizator ovy2906Popescu Ovidiu ovy2906 Data 15 aprilie 2008 14:42:25
Problema Secventa Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.36 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],semn;   
char buffer[8*510005];
  
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);
     nr=0;semn=1;q=0;
     for (i=0;i<M;++i){
         if (buffer[i]>='0'&&buffer[i]<='9'){
            nr=buffer[i]-'0';
            while (buffer[i+1]>='0'&&buffer[i+1]<='9'){
                  nr*=10;nr+=buffer[++i]-'0';
            }
            V[++q]=nr*semn;
            nr=0;semn=1;
         }
         else if (buffer[i]=='-')semn=-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;   
}