Pagini recente » Cod sursa (job #215545) | Cod sursa (job #594443) | Cod sursa (job #1900162) | Cod sursa (job #1907764) | Cod sursa (job #2446579)
#include <iostream>
#include <cstdio>
#define NRMIN -30001
#define NRMAX 30001
#define NMAX 500003
#define VMAX 60003
#define OFFSET 30000
using namespace std;
int v[NMAX];
int f[VMAX];
void clean(int start, int end)
{
for (int i = start; i <= end; ++i)
f[v[i]] = 0;
}
int findNextMin(int x)
{
while (!f[x])
++x;
return x - OFFSET;
}
int main()
{
freopen("secventa.in", "r", stdin);
freopen("secventa.out", "w", stdout);
int n, k;
scanf("%d", &n);
scanf("%d", &k);
for (int i = 1; i <= n; ++i)
{
scanf("%d", &v[i]);
}
int minimum = NRMAX;
int posLastMin = 0;
for (int i = 1; i <= k; ++i)
{
if (v[i] < minimum)
{
minimum = v[i];
posLastMin = i;
}
}
int sol = minimum;
int solPos = 1;
int roi = posLastMin + 1;
minimum = v[roi];
for (int i = posLastMin + 1; i <= n; ++i)
{
if (v[i] <= sol)
{
clean(roi, i);
roi = i + 1;
minimum = v[i + 1];
continue;
}
if (v[i] < minimum)
minimum = v[i];
++f[v[i] + OFFSET];
if (i - roi == k - 1)
{
sol = minimum;
minimum = findNextMin(minimum + 1 + OFFSET);
solPos = roi;
++roi;
}
}
printf("%d %d %d", solPos, solPos + k - 1, sol);
return 0;
}