Pagini recente » Cod sursa (job #64568) | Cod sursa (job #2454796) | Cod sursa (job #1803033) | Cod sursa (job #1502370) | Cod sursa (job #2999624)
#include <fstream>
#include <climits>
using namespace std;
ifstream cin("secventa.in");
ofstream cout("secventa.out");
int pq = 0, uq = -1;
//pq - primul din coada
//uq - ultimul din coada
//In practica in coada NU retinem si valoarea elementului, ci doar indicele ( pt. ca avand indicele, elementul il luam direct din vector)
int n, k;
int a[500005];
int q[500005];
int baza = INT_MIN;
int start;
int main()
{
cin >> n >> k;
for (int i = 1; i <= n; i++)
cin >> a[i];
for (int i = 1; i <= n; i++)
{
//actualizam coada luandu-l in calcul pe a[i]
//deci golesc coada de elemntele mai mari deact a[i]
while (pq <=uq && a[i] <= a[q[uq]])
uq--;
q[++uq] = i;
//verific daca primul din coada mai face parte din secventa curenta. Daca nu, il sterg.
if (q[pq] <= i - k)
pq++;
//afisez minimul
if (i >= k)
if (a[q[pq]] > baza)
{
baza = a[q[pq]];
start = q[pq];
}
}
cout << start << ' ' << start + k - 1 << ' ' << baza;
return 0;
}