Pagini recente » Cod sursa (job #2225159) | Cod sursa (job #17702) | Cod sursa (job #852735) | Cod sursa (job #2477700) | Cod sursa (job #2891439)
#include <deque>
#include <stdio.h>
#define NMAX 500005
#define MAX 30005
using namespace std;
int v[NMAX];
int main()
{
FILE *in, *out;
in = fopen("secventa.in", "r");
out = fopen("secventa.out", "w");
int n, k;
fscanf(in, "%d %d", &n, &k);
for (int i = 1; i <= n; ++i)
fscanf(in, "%d", v + i);
deque <int> dq;
for (int i = 1; i <= k; ++i) {
while (!dq.empty() && v[dq.back()] >= v[i])
dq.pop_back();
dq.push_back(i);
}
int best = v[dq.front()];
int best_start = 1;
int best_end = k;
for (int i = k + 1; i <= n; ++i) {
while (!dq.empty() && v[dq.back()] >= v[i])
dq.pop_back();
dq.push_back(i);
if (i - dq.front() + 1 > k)
dq.pop_front();
if (best < v[dq.front()]) {
best = v[dq.front()];
best_start = i - k + 1;
best_end = i;
}
}
while (best_start >= 2 && v[best_start - 1] >= best)
--best_start;
fscanf(out, "%d %d %d\n", best_start, best_end, best);
fclose(in);
fclose(out);
return 0;
}