Pagini recente » Cod sursa (job #1072530) | Rating Nguyen Duc Thang (marvinthang) | Cod sursa (job #1799413) | Cod sursa (job #559946) | Cod sursa (job #2044419)
#include <fstream>
#include <deque>
#define NMAX 500010
#define INF 100000
using namespace std;
ifstream fin("secventa.in");
ofstream fout("secventa.out");
int n, k, stmin = INF, drmin = INF, bmax = -INF, v[NMAX], b, st, dr;
deque<int> d;
void insereaza(int x);
void sterge(int i);
int main()
{
int i;
fin >> n >> k;
for (i = 1; i < k; i++)
{
fin >> v[i];
insereaza(i);
}
for (i = k; i <= n; i++)
{
fin >> v[i];
sterge(i);
insereaza(i);
b = v[d.front()];
st = d.front();
dr = d.back();
if (dr - st >= k - 1 && (b > bmax || (b == bmax && st < stmin) || (b == bmax && st == stmin && dr < drmin)))
{
bmax = b;
stmin = st;
drmin = dr;
}
}
fout << stmin << ' ' << drmin << ' ' << bmax << '\n';
fout.close();
return 0;
}
void insereaza(int x)
{
while (!d.empty() && v[x] < v[d.back()])
d.pop_back();
d.push_back(x);
}
void sterge(int i)
{
while (d.front() <= i - k)
{
/*b = v[d.front()];
st = d.front();
dr = d.back();
if (dr - st >= k - 1 && (b > bmax || (b == bmax && st < stmin) || (b == bmax && st == stmin && dr < drmin)))
{
bmax = b;
stmin = st;
drmin = dr;
}*/
d.pop_front();
}
}