Pagini recente » Cod sursa (job #3192174) | Cod sursa (job #1728230) | Cod sursa (job #2468371) | Cod sursa (job #1624492) | Cod sursa (job #112661)
Cod sursa(job #112661)
#include <cstdio>
#include <cstdlib>
#include <memory>
using namespace std;
int const minval = -30000;
int const maxval = +30000;
int const maxlen = 500000;
int a[maxlen];
int val_c[1+maxlen], * val_v=& val_c[1];
int pos_c[1+maxlen], * pos_v=& pos_c[1];
int c_c[maxval-minval+1];
int *c= &c_c[-minval];
char iobuf[BUFSIZ];
char line [10240];
int
main() {
register int i, j, t, n, k, pos, val, q1, q2;
FILE * fin;
fin=fopen("secventa.in","r");
setbuf(fin, iobuf);
fscanf(fin, "%d %d\n", &n, &k);
i=0;
while(i+9<n) {
fscanf(fin, "%d %d %d %d %d %d %d %d %d %d",
&a[i+0], &a[i+1], &a[i+2], &a[i+3], &a[i+4],
&a[i+5], &a[i+6], &a[i+7], &a[i+8], &a[i+9]);
i=i+10;
}
while(i<n) {
fscanf(fin, "%d", &a[i]);
++i;
}
fclose(fin);
for(i=minval;i<=maxval;i++) c[i]=-1;
for(i=0;i<k;i++) c[a[i]]=i;
for(i=minval, j=0; i<=maxval; i++)
if(-1!=c[i]) {
val_v[j]=i;
pos_v[j]=c[i];
++j;
}
pos=0;
val=val_v[0];
q1=0;
q2=-1+j;
pos_v[-1]=-1;
val_v[-1]=-1+minval;
for(i=k;i<n;i++) {
t=a[i];
while(val_v[q2]>=t) --q2;
++q2;
val_v[q2]=t;
pos_v[q2]=i;
if(i-k>=pos_v[q1])
{
val_v[q1]=-1+minval;
++q1;
}
if(val<val_v[q1]) {
val=val_v[q1];
pos=i-k+1;
}
}
FILE * fout;
fout=fopen("secventa.out", "w");
fprintf (fout, "%d %d %d\n", 1+pos, pos+k, val);
fclose(fout);
return 0;
}