Pagini recente » Cod sursa (job #2045488) | Cod sursa (job #882674) | Cod sursa (job #1492579) | Cod sursa (job #3041799) | Cod sursa (job #1371718)
#include <cstdio>
#include <stack>
#include <algorithm>
using namespace std;
#define inFile "secventa.in"
#define outFile "secventa.out"
#define MAX_N 500001
#define INF 1<<30
stack<int> s;
int a[MAX_N], left[MAX_N], right[MAX_N];
int main() {
freopen(inFile, "r", stdin);
freopen(outFile, "w", stdout);
int n, k, i;
scanf("%d %d", &n, &k);
for(i = 1; i <= n; i++)
scanf("%d", &a[i]);
for(i = 1; i <= n; i++) {
while(!s.empty() && a[i] < a[s.top()])
right[s.top()] = i, s.pop();
s.push(i);
}
while(!s.empty())
right[s.top()] = n+1, s.pop();
for(i = n; i; i--) {
while(!s.empty() && a[i] < a[s.top()])
left[s.top()] = i, s.pop();
s.push(i);
}
while(!s.empty())
left[s.top()] = 0, s.pop();
int base_max = -INF, i_max = -1, j_max = -1;
for(i = 1; i <= n; i++) {
if(right[i] - left[i] - 1 >= k) {
if(a[i] > base_max) {
base_max = a[i];
i_max = left[i]+1;
j_max = max(i, left[i]+k);
}
}
}
printf("%d %d %d\n", i_max, j_max, base_max);
return 0;
}