Pagini recente » Diferente pentru utilizator/codrin18 intre reviziile 2 si 6 | Cod sursa (job #558154) | Cod sursa (job #344892) | Cod sursa (job #609347) | Cod sursa (job #3307377)
#include <vector>
#include <deque>
#include <iostream>
#include <fstream>
using namespace std;
int main() {
ifstream fin("secventa.in");
ofstream fout("secventa.out");
int N, M;
fin >> N >> M;
vector<int> a(N);
deque<int> dq(N);
for(int i=0; i<N; ++i) {
fin >> a[i];
}
for(int i=0; i<M-1; ++i) {
while(!dq.empty() && a[dq.back()] >= a[i]) {
dq.pop_back();
}
dq.push_back(i);
}
int mx = 0, imx = 0;
for(int i=M-1; i<N; ++i) {
while(!dq.empty() && dq.front() <= i-M) {
dq.pop_front();
}
while(!dq.empty() && a[dq.back()] >= a[i]) {
dq.pop_back();
}
dq.push_back(i);
if(mx < a[dq.front()]) {
mx = a[dq.front()];
imx = i;
}
//cout << i << ' ' << a[dq.front()] << '\n';
}
fout << imx - M + 2 << ' ' << imx + 1 << ' ' << mx << '\n';
return 0;
}