Pagini recente » Borderou de evaluare (job #1569303) | Cod sursa (job #1829349) | Cod sursa (job #1611186) | Cod sursa (job #2950947) | Cod sursa (job #110021)
Cod sursa(job #110021)
#include <stdio.h>
int d[500001],c[500001];
int cauta(int x,int p,int u)
{
int m;
while (p<u)
{
m=(p+u)/2;
if (x<=c[m])
u=m;
else
p=m+1;
}
if (c[p]>=x)
return p;
return p+1;
}
int main()
{
FILE *in,*out;
int n,k,aux,a,b,p,u,min,i,t;
in=fopen("secventa.in","r");
out=fopen("secventa.out","w");
fscanf(in,"%d%d",&n,&k);
min=-31000;
a=0;
b=0;
p=1;
u=1;
fscanf(in,"%d",&aux);
c[1]=aux;
d[1]=1;
for (i=2;i<k;i++)
{
fscanf(in,"%d",&aux);
t=cauta(aux,p,u);
c[t]=aux;
d[t]=i;
u=t;
}
for (i=k;i<=n;i++)
{
fscanf(in,"%d",&aux);
if (i-d[p]==k)
p++;
t=cauta(aux,p,u);
c[t]=aux;
d[t]=i;
u=t;
if (min<c[p])
{
min=c[p];
a=i-k+1;
b=i;
}
}
fprintf(out,"%d %d %d\n",a,b,min);
fclose(in);
fclose(out);
}