Pagini recente » Cod sursa (job #1954561) | Cod sursa (job #2121547) | Cod sursa (job #2357849) | Cod sursa (job #722241) | Cod sursa (job #215410)
Cod sursa(job #215410)
#include <stdio.h>
#include <string.h>
char cz[3000010];
int n,p,v[500005],coada[500005],pr,ul;
void citirith()
{
int i=0,q=0,x,semn;
scanf("%d%d\n",&n,&p);
gets(cz); x=0; semn=1;
for (i=0; cz[i]!='\n' && cz[i]!='\0'; ++i)
{
if (cz[i]==' ')
{
v[++q]=x*semn;
x=0;
semn=1;
}
if (cz[i]=='-')
semn=-1;
if (cz[i]>='0'&&cz[i]<='9')
x=x*10+cz[i]-'0';
}
v[++q]=x*semn;
for (int i=1; i<=n; i++)
printf("%d ",v[i]);
printf("\n");
}
int caut(int x)
{
int m,st=pr,dr=ul;
while (st!=dr)
{
m=(st+dr)/2;
if (x>v[coada[m]])
st=m+1;
else
dr=m;
}
if(x>v[coada[st]])
++st;
return st;
}
void rezolvarith()
{
int sol=-31000,poz=0,st,dr;
pr=1;
coada[++ul]=1;
for (int i=2; i<=n; i++)
{
while (i-coada[pr]+1>p)
++pr;
poz=caut(v[i]);
ul=poz;
coada[ul]=i;
if (v[coada[pr]]>sol && i>=p)
{
st=i-p+1;
dr=i;
sol=v[coada[pr]];
}
}
printf("%d %d %d\n",st,dr,sol);
}
int main()
{
freopen("secventa.in","r",stdin);
freopen("secventa.out","w",stdout);
citirith();
rezolvarith();
return 0;
}