Pagini recente » Cod sursa (job #1623674) | Cod sursa (job #2339436) | Cod sursa (job #1905961) | Cod sursa (job #2920382) | Cod sursa (job #671031)
Cod sursa(job #671031)
#include<cstdio>
const int N = 500002;
int n, k, a[N], poz[N];
void citire() {
scanf("%d%d", &n, &k);
for (int i = 1; i <= n; ++i)
scanf("%d", &a[i]);
}
void rez() {
int dr = 0, st = 1;
for (int i = 1; i <= k; ++i) {
while (dr>=st && a[poz[dr]] >= a[i]) // coada este mai mare, sterg
--dr;
poz[++dr] = i; // adaug numarul curent ca un posibil minim
}
int bmax = a[poz[st]], inc = 1, sf = k;
for (int i = k + 1; i <= n; ++i) {
while (dr>=st && a[poz[dr]] >= a[i]) // coada este mai mare, sterg
--dr;
poz[++dr] = i; // adaug numarul curent ca un posibil minim
while (i - poz[st] >= k) // daca varful este prea departat, il sterg
++st;
if (a[poz[st]] > bmax) {
bmax = a[poz[st]];
inc = i - k + 1;
sf = i;
}
}
printf("%d %d %d\n", inc, sf, bmax);
}
int main() {
freopen("secventa.in", "r", stdin);
freopen("secventa.out", "w", stdout);
citire();
rez();
return 0;
}