Pagini recente » Cod sursa (job #199774) | Cod sursa (job #2294669) | Cod sursa (job #1162794) | Cod sursa (job #1912484) | Cod sursa (job #71838)
Cod sursa(job #71838)
#include <cstdio>
#include <cstring>
#define maxn 500001
FILE *in = fopen("secventa.in","r"), *out = fopen("secventa.out","w");
int n;
int k;
int e;
int a[maxn] = {0};
char buf[1024];
void read()
{
fscanf(in, "%d %d", &n, &k);
e = n + 1;
int k = 1;
int minus = 0;
while ( fgets(buf, 1024, in) )
{
int l = strlen(buf);
for ( int i = 0; i < l; ++i )
if ( buf[i] <= '9' && buf[i] >= '0' )
a[k] = a[k]*10 + (buf[i] - '0');
else if ( buf[i] == ' ' )
{
if ( minus )
a[k] *= -1;
++k;
minus = 0;
}
else if ( buf[i] == '-' )
minus = 1;
}
//
// for ( int i = 1; i < e; ++i )
// printf("%d ", a[i]);
}
struct deque
{
int poz, v;
};
deque Q[maxn];
int main()
{
read();
int first = 1, last = 1;
int max = -3000000;
int pmin = 0;
int min = 3000000;
for ( int i = 1; i < k + 1; ++i )
if ( a[i] < min )
min = a[i], pmin = i;
max = min;
for ( int i = 1; i < e; ++i )
{
while ( first < last + 1 && i - Q[first].poz >= k )
++first;
if ( Q[first].v > max && Q[first].poz > k - 1 )
max = Q[first].v, pmin = Q[first].poz;
while ( last > first - 1 && Q[last].v > a[i] - 1 )
--last;
++last;
Q[last].v = a[i];
Q[last].poz = i;
// for ( int j = first; j <= last; ++j )
// printf("%d ", Q[j].v);
// printf("\n");
}
int st = pmin;
int dr = pmin;
int p = max - 1;
while ( a[st] > p && st )
--st;
++st;
while ( a[dr] > p && dr - st < k )
++dr;
--dr;
fprintf(out, "%d %d %d\n", st, dr, max);
return 0;
}