Pagini recente » Cod sursa (job #3249745) | Cod sursa (job #1284143) | Cod sursa (job #2271624) | Cod sursa (job #1682281) | Cod sursa (job #3281070)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("secventa.in");
ofstream fout("secventa.out");
int n, k, v[500010];
deque<int> dq;
int main()
{
fin >> n >> k;
for(int i=1; i<=n; i++) fin >> v[i];
for(int i=1; i<=k; i++) {
while(!dq.empty() && v[i] <= v[dq.back()]) dq.back();
dq.push_back(i);
}
int maxim = v[dq.front()];
for(int i=k+1; i<=n; i++) {
while(!dq.empty() && v[i] <= v[dq.back()]) dq.pop_back();
dq.push_back(i);
while(!dq.empty() && i - k >= dq.front()) dq.pop_front();
maxim = max(maxim, v[dq.front()]);
}
int rez = -1, solSt, solDr;
for(int i=1; i<=n; i++) {
if(v[i] == maxim) {
int st = i - 1;
while(st >= 1 && v[st] >= v[i]) st--;
st++;
int dr = i + 1;
while(dr <= n && v[dr] >= v[i]) dr++;
dr--;
int lung = dr - st + 1;
if(lung > rez) rez = lung, solSt = st, solDr = dr;
i = dr - 1;
}
}
fout << solSt << " " << solDr << " " << maxim;
return 0;
}