Pagini recente » Cod sursa (job #1016106) | Cod sursa (job #1123069) | Cod sursa (job #1017226) | Cod sursa (job #274450) | Cod sursa (job #72012)
Cod sursa(job #72012)
#include <cstdio>
#include <cstring>
#define maxn 500001
#define inf 3000000
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 t = 1;
int minus = 0;
while ( fread(buf, 1, 1024, in) )
{
int l = strlen(buf);
for ( int i = 0; i < l; ++i )
if ( buf[i] <= '9' && buf[i] >= '0' )
a[t] = a[t]*10 + (buf[i] - '0');
else if ( buf[i] == ' ' )
{
if ( minus )
a[t] *= -1;
++t;
minus = 0;
}
else if ( buf[i] == '-' )
minus = 1;
}
if ( minus )
a[t] *= -1;
}
//struct deque
//{
// int poz, v;
//};
//
//deque Q[maxn];
int main()
{
read();
// int first = 1, last = 1;
//
// int max = -inf;
//
// int pmin = 0;
//
// int min = inf;
// for ( int i = 1; i < k + 1; ++i )
// if ( a[i] < min )
// min = a[i], pmin = i;
//
// max = min;
//// min = inf;
//
// int st = 0;
// int dr = 0;
//
// for ( int i = 1; i < e; ++i )
// {
// while ( first <= last && Q[first].poz <= i - k )
// ++first;
// while ( last >= first && Q[last].v >= a[i] )
// --last;
//
// if ( Q[first].v > max && Q[first].poz >= k )
// max = Q[first].v, pmin = Q[first].poz;
//
// ++last;
// Q[last].v = a[i];
// Q[last].poz = i;
//
////
//// for ( int j = first; j <= last; ++j )
//// printf("%d ", Q[j].v);
//// printf("\n");
// }
//
// dr = st = pmin;
//
// while ( a[st] >= max && st )
// --st;
// ++st;
//
// while ( a[dr] >= max && dr - st < k )
// ++dr;
// --dr;
//
// fprintf(out, "%d %d %d\n", st, dr, max);
int st = 0, dr = 0, min = inf, max = -inf;
for ( int i = 1; i <= e; ++i )
{
min = inf;
int poz = i;
if ( i + k > e )
break;
int l = i + k;
int t = i;
for ( int j = i; j < l && j < e; ++j )
if ( a[j] < min )
min = a[j], poz = j, i = poz;
if ( min > max && l <= e )
max = min, st = t, dr = t + k - 1;
}
fprintf(out, "%d %d %d\n", st, dr, max);
return 0;
}