Pagini recente » Cod sursa (job #2152201) | Cod sursa (job #818327) | Cod sursa (job #2293169) | Cod sursa (job #855827) | Cod sursa (job #3031283)
#include <fstream>
#include <deque>
using namespace std;
ifstream fin("secventa.in");
ofstream fout("secventa.out");
int N, K, sir[500001], baza_maxima = -30001, indice_start, indice_end;
deque<int> sirul_de_indici;
void stergere_val_mai_mari(int indice_el_nou)
{
while (!sirul_de_indici.empty() && sir[sirul_de_indici.back()] > sir[indice_el_nou])
sirul_de_indici.pop_back();
}
void verificare_vechime_deque(int indice_el_nou)
{
while (!sirul_de_indici.empty() && sirul_de_indici.front() <= indice_el_nou - K)
sirul_de_indici.pop_front();
}
void rezolvare()
{
for (int i = 0; i < K - 1; i++)
sirul_de_indici.push_back(i);
for (int i = K-1; i < N; i++)
{
stergere_val_mai_mari(i);
verificare_vechime_deque(i);
sirul_de_indici.push_back(i);
if (baza_maxima < sir[sirul_de_indici.front()])
{
baza_maxima = sir[sirul_de_indici.front()];
indice_end = i;
}
}
}
int main()
{
fin >> N >> K;
for (int i = 0; i < N; i++)
fin >> sir[i];
rezolvare();
fout << indice_end - K + 2 << " " << indice_end + 1 << " " << baza_maxima << "\n";
return 0;
}