Pagini recente » Istoria paginii utilizator/sava_barbuta_dospra | Cod sursa (job #97846) | Cod sursa (job #2201585) | Cod sursa (job #1276141) | Cod sursa (job #2947129)
#include <fstream>
#include <deque>
#include <cstring>
using namespace std;
ifstream fin("secventa.in");
ofstream fout("secventa.out");
const int N = 5e5 + 5;
deque<int> Q;
int n, k, bazaMax = -32001, v[N];
int i_final;
// citeste si returneaza urmatorul numar intreg din fisier
void get(int& x);
void next();
int main()
{
next();
get(n);
get(k);
for (int i = 1; i <= n; ++i)
{
get(v[i]);
while (!Q.empty() && v[i] < v[Q.back()])
Q.pop_back();
if (!Q.empty() && Q.front() + k == i) // vom adauga pe i deci vom depasi lungimea k
Q.pop_front();
Q.push_back(i);
if (i >= k && v[Q.front()] > bazaMax)
{
bazaMax = v[Q.front()];
i_final = i;
}
}
int i_initial = i_final - k + 1;
fout << i_initial << ' ' << i_final << ' ' << bazaMax;
return 0;
}
const int Lim = 1000;
int p = Lim - 1;
char s[Lim + 1]; // pt null
void next()
{
if (++p == Lim)
{
fin.get(s, Lim + 1, EOF);
p = 0;
}
}
void get(int &x)
{
while (s[p] != '-' && !isdigit(s[p]))
next();
int semn = 1;
if (s[p] == '-')
{
semn = -1;
next();
}
for (x = 0; isdigit(s[p]); next())
x = x * 10 + s[p] - '0';
x *= semn;
}