Pagini recente » Cod sursa (job #2899245) | Cod sursa (job #3277120) | Cod sursa (job #2211891) | Cod sursa (job #673888) | Cod sursa (job #148534)
Cod sursa(job #148534)
#include <iostream>
#include <cstdio>
#include <utility>
using namespace std;
#define mp make_pair
#define f first
#define s second
const long MAX = 500010;
long Dequef[MAX], Deques[MAX];
long p,u;
long n,k,i,x;
long st, dr, m=-0x3f3f3f;
long nr;
void print() {
for (long i=p; i<u; ++i)
printf("(%ld %ld) ", Dequef[i], Deques[i]);
printf("\n");
}
inline void push(long inf, long ins) {
while ( p<u && inf-Dequef[p]>=k )
++p;
if ( ins<Deques[p] ) {
while ( ins<Deques[p] && p<u )
++p;
Dequef[p] = inf; Deques[p] = ins;
if ( p==u ) ++u;
} else {
while ( ins<Deques[u-1] )
--u;
Deques[u] = ins;
Dequef[u++] = inf;
}
// print();
}
inline long nrc(long x) {
long ret = 0;
if ( x<=0 ) ret++, x=-x;
for (; x; x/=10) ret++;
return ret;
}
int main() {
freopen("secventa.in", "r", stdin);
scanf("%ld %ld\n", &n, &k);
for (i=0; i<k-1; ++i) {
scanf("%ld", &x);
push(i, x);
}
for ( i=k-1; i<n; ++i) {
scanf("%ld", &x);
push(i, x);
if ( i>=k-1 && Deques[p] > m ) {
st = i-k+1; dr = i;
m = Deques[p];
}
}
fprintf(fopen("secventa.out", "w"), "%ld %ld %ld\n", st+1, dr+1, m);
return 0;
}