Pagini recente » Cod sursa (job #1077637) | Cod sursa (job #658497) | Cod sursa (job #2202417) | Cod sursa (job #2927980) | Cod sursa (job #314896)
Cod sursa(job #314896)
#include <stdio.h>
int N,K,in=1,sf=1,i,j,di=1,ds=1;//in,sf - pt secventa, di,ds - pt deque
short v[500001],d[500001],p[500001],bm=-32001,b,n,m=1;
char s[3500001];
void sub()
{for(;v[i]<=d[ds]&&ds>0;ds--);
d[++ds]=v[i];
p[ds]=i;}
int main()
{FILE *f=fopen("secventa.in","r"),*g=fopen("secventa.out","w");
fscanf(f,"%d %d\n",&N,&K);
fgets(s,3500001,f);
for(;j<N;++i)//++i sare peste spatiul dintre numere
{if(s[i]=='-'){m=-1;++i;}
while(s[i]>='0'&&s[i]<='9'){n=n*10+s[i]-'0';++i;}
v[++j]=n*m;m=1;n=0;}
d[1]=v[1];p[1]=1;
for(i=2;i<=K-1;++i)
sub();
for(i=K;i<=N;++i)
{for(;i-p[di]>=K;di++);
b=v[i];
if(d[di]<b)b=d[di];
if(b>bm)
{bm=b;
in=i-K+1;
sf=i;}
sub();
if(di>ds)di=ds;
}
fprintf(g,"%d %d %d",in,sf,bm);
return 0;
}