Pagini recente » Cod sursa (job #3340730) | Cod sursa (job #3345791) | Cod sursa (job #3256302) | Cod sursa (job #2463572) | Cod sursa (job #3351245)
#include <bits/stdc++.h>
using namespace std;
#define goala(dq) dq.empty()
int n, k;
int v[500005], l[500005], r[500005];
ifstream f ("secventa.in");
ofstream g ("secventa.out");
int main(){
f >> n >> k;
for(int i = 0; i < n; i++)
f >> v[i];
stack<int> S;
for(int i = 0;i < n; i++){
while (!S.empty() && v[S.top()] >= v[i])
S.pop();
if(S.empty())
l[i] = -1;
else
l[i] = S.top();
S.push(i);
}
while(!S.empty())
S.pop();
for(int i = n-1; i >= 0; i--){
while(!S.empty() && v[S.top()] >= v[i])
S.pop();
if(S.empty())
r[i] = n;
else
r[i] = S.top();
S.push(i);
}
int maxim = -30003, bunstart, bunend;
for(int i= 0; i < n; i++){
int st = l[i] + 1;
int dr = r[i] - 1;
int lung = dr - st + 1;
if(lung >= k){
int start = st;
int end = st + k - 1;
int mic = v[i];
if (mic > maxim) {
maxim = mic;
bunstart = start;
bunend = end;
}
else if (mic == maxim){
if (start < bunstart){
bunstart = start;
bunend = end;
}
else if (start == bunstart && end < bunend)
bunend = end;
}
}
}
g << bunstart << " " << bunend << " " << maxim;
}