Pagini recente » Cod sursa (job #2579210) | Cod sursa (job #2558949) | Cod sursa (job #3283360) | Cod sursa (job #193280) | Cod sursa (job #84524)
Cod sursa(job #84524)
#include <stdio.h>
#define NMAX 500001
int N, K;
int A[NMAX], p[NMAX];
int key[NMAX], q[NMAX];
int key_max, l_max, r_max;
inline parent(i) {
return i >> 1;
}
inline left(i) {
return i << 1;
}
inline right(i) {
return (i << 1) | 1;
}
void heapify(int i) {
int l, r, smallest, tmp;
l = left(i), r = right(i);
if (key[i] > key[l] && l <= K)
smallest = l;
else
smallest = i;
if (key[smallest] > key[r] && r <= K) // ; - this damned semicolon made me waste 4 hours of worthless debug
smallest = r;
while (smallest != i) {
tmp = key[i], key[i] = key[smallest], key[smallest] = tmp;
tmp = q[i], q[i] = q[smallest], q[smallest] = tmp;
p[q[i]] = i, p[q[smallest]] = smallest;
i = smallest;
l = left(i), r = right(i);
if (key[i] > key[l] && l <= K)
smallest = l;
else
smallest = i;
if (key[smallest] > key[r] && r <= K)
smallest = r;
}
}
void heap_build() {
int i;
for (i = 1; i <= K; i++) {
key[i] = A[i];
p[i] = q[i] = i;
}
for (i = K/2; i; i--) {
heapify(i);
}
}
void heap_insert(int i) {
int tmp, x;
K++;
key[K] = A[i], q[K] = i, p[i] = K;
x = K;
while (key[parent(x)] > key[x] && x > 1) {
tmp = key[x], key[x] = key[parent(x)], key[parent(x)] = tmp;
tmp = q[x], q[x] = q[parent(x)], q[parent(x)] = tmp;
p[q[x]] = x, p[q[parent(x)]] = parent(x);
x = parent(x);
}
}
void heap_delete(int i) {
key[i] = key[K], q[i] = q[K], p[q[i]] = i;
K--;
heapify(i);
}
int top() {
return key[1];
}
int main() {
int i, j;
FILE *fi = fopen("secventa.in", "r");
FILE *fo = fopen("secventa.out", "w");
fscanf(fi, "%d %d", &N, &K);
for (i = 1; i <= N; i++)
fscanf(fi, "%d", &A[i]);
for (i = 1; i <= N; i++)
printf("%d ", A[i]);
heap_build();
printf("\n\n");
key_max = top(), l_max = 1, r_max = K;
for (i = 1; i <= N - K; i++) {
heap_delete(p[i]);
heap_insert(i+1+K);
if (key_max < top())
key_max = top(), l_max = i+1, r_max = i+K;
}
fprintf(fo, "%d %d %d\n", l_max, r_max, key_max);
fcloseall();
return 0;
}