Pagini recente » Cod sursa (job #427503) | Cod sursa (job #2001986) | Cod sursa (job #2875460) | Cod sursa (job #20108) | Cod sursa (job #112656)
Cod sursa(job #112656)
#include <cstdio>
#include <cstdlib>
#include <memory>
using namespace std;
int const minval = -30000;
int const maxval = +30000;
int const maxlen = 500000;
int a[maxlen];
struct queue_st {
int val, pos;
} q_c[1+maxlen], * q=& q_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);
for(i=0;i<n;i++) fscanf(fin, "%d", &a[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]) {
q[j].val=i;
q[j].pos=c[i];
++j;
}
pos=0;
val=q[0].val;
q1=0;
q2=-1+j;
q[-1].pos=-1;
q[-1].val=-1+minval;
for(i=k;i<n;i++) {
if(i-k>=q[q1].pos)
{
q[q1].val=-1+minval;
++q1;
}
t=a[i];
while(q[q2].val>=t) --q2;
++q2;
q[q2].val=t;
q[q2].pos=i;
if(val<q[q1].val) {
val=q[q1].val;
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;
}
1 2 3 4 5 6