Pagini recente » Diferente pentru preoni-2007/runda-3/solutii intre reviziile 35 si 36 | Istoria paginii runda/ghiocel | Monitorul de evaluare | Cod sursa (job #2263846) | Cod sursa (job #2502246)
#include <fstream>
#include <cstdio>
#include <cctype>
#include <queue>
using namespace std;
FILE *fin = fopen("secventa.in", "r");
ofstream fout("secventa.out");
const int bsize = 1<<16;
char buff[bsize];
int poz = bsize;
inline char next()
{
if (poz == bsize)
{
fread(buff, 1, bsize, fin);
poz = 0;
}
return buff[poz++];
}
int nr()
{
char x;
int nr = 0, s = 1;
do
{
x = next();
} while (x!='-' && isdigit(x) == 0);
if (x == '-')
{
s = -1;
x = next();
}
while (isdigit(x))
{
nr = nr*10 + x-48;
x = next();
}
return s*nr;
}
int main()
{
int n, k, i, x;
int bmax, ibmax;
deque <pair <int, int>> d;
n = nr();
k = nr();
for (i = 1; i<=k; i++)
{
x = nr();
while (d.empty() == 0 && d.front().first > x)
d.pop_front();
d.push_front({x, i});
}
ibmax = k;
bmax = d.back().first;
for (i = k+1; i<=n; i++)
{
x = nr();
while (d.empty() == 0 && d.front().first > x)
d.pop_front();
d.push_front({x, i});
if (i - d.back().second == k)
d.pop_back();
if (d.back().first > bmax)
{
bmax = d.back().first;
ibmax = i;
}
}
fout << ibmax - k + 1 << ' ' << ibmax << ' ' << bmax;
return 0;
}