Pagini recente » Cod sursa (job #1123889) | Istoria paginii runda/nimic_suspect/clasament | Cod sursa (job #2022113) | Cod sursa (job #1604914) | Cod sursa (job #179006)
Cod sursa(job #179006)
#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;
}