Pagini recente » Cod sursa (job #1461705) | Cod sursa (job #980704) | Cod sursa (job #2960599) | Cod sursa (job #3209017) | Cod sursa (job #2360225)
#include <fstream>
#include <iostream>
#include <deque>
using namespace std;
ifstream fin("secventa.in");
ofstream fout("secventa.out");
deque<int> Q; // un minQ cu pozitii
int a[500001];
int n, k;
int poz, Max;
void Get(int &x);
int main()
{
Get(n); Get(k);
int i;
for (i = 1; i <= n; ++i)
{
Get(a[i]);
while (!Q.empty() && a[i] < a[Q.back()])
Q.pop_back();
Q.push_back(i);
if (Q.back() - Q.front() + 1 > k)
Q.pop_front();
if (i >= k)
{
if (a[Q.front()] > Max )
{
Max = a[Q.front()];
poz = i - k + 1;
}
if (a[Q.front()] <= i - k + 1)
a.pop_front();
}
}
fout << poz << ' ' << poz + k - 1 << ' ' << Max;
return 0;
}
const int Lim = 1 << 20;
int p1 = Lim - 1;
char s[Lim];
void Next()
{
if (++p1 == Lim)
fin.get(s, Lim + 1, EOF), p1 = 0;
}
void Get(int &x)
{
while (s[p1] < '0' || s[p1] > '9')
{
if (s[p1] == '-')
break;
Next();
}
int sgn = 1;
if (s[p1] == '-')
{
sgn = -1;
Next();
}
for (x = 0; s[p1] >= '0' && s[p1] <= '9'; Next())
x = x * 10 + s[p1] - '0';
x *= sgn;
}