Pagini recente » Cod sursa (job #1012467) | Cod sursa (job #2766428) | Cod sursa (job #1577276) | Cod sursa (job #2531513) | Cod sursa (job #1024863)
//#include <fstream>
#include <cstdio>
#include <cstring>
using namespace std;
FILE *f=fopen("secventa.in","r");
FILE *g=fopen("secventa.out","w");
int L,n,k,t,maxim=-500000,x;
int v[500011],deq[500011];
char s[7*500011],*q,ch;
int main(void){
register int i=0,p,u;
// f>>n>>k;
fscanf(f,"%d %d\n",&n,&k);
t=1;
fgets(s,sizeof(s),f);
deq[1]=1;
p=u=1;
q=s;
while(*q!='\0' && *q!='\n'){
if(*q==' '){
x*=t;
v[++i]=x;
while(p<=u && v[i]<v[deq[u]])
u--;
deq[++u]=i;
if(i-deq[p]==k)
p++;
if(i>=k){
if(v[deq[p]]>maxim){
maxim=v[deq[p]];
}
}
x=0,t=1;
}
else if(*q=='-')
t=-1;
else
x=x*10+(*q-'0');
q++;
}
x*=t;
v[++i]=x;
while(p<=u && v[i]<v[deq[u]])
u--;
deq[++u]=i;
if(i-deq[p]==k)
p++;
if(i>=k){
if(v[deq[p]]>maxim){
maxim=v[deq[p]];
}
}
x=0,t=1;
int dr,st;
while(deq[p]+k-1<=n){
if(v[deq[p]]>maxim){
maxim=v[deq[p]];
st=deq[p];
dr=deq[u];
}
p++;
}
fprintf(g,"%d %d %d",maxim,dr-k+1,dr);
return 0;
}