Pagini recente » Cod sursa (job #2925527) | Cod sursa (job #553161) | Cod sursa (job #3210672) | Cod sursa (job #5858) | Cod sursa (job #3138058)
#include <stdio.h>
#include <stdlib.h>
#define MAXNR 60000
#define MAX 30000
#define MAXN 500000
int f[MAXNR + 1], v[MAXN];
int main()
{
FILE *fin, *fout;
int n, k, i, st, dr, min, max;
fin = fopen("secventa.in", "r");
fscanf(fin, "%d%d", &n, &k);
min = MAX + 1;
for (i = 0; i < k; i++) {
fscanf(fin, "%d", &v[i]);
if (v[i] < min) {
min = v[i];
}
f[v[i] + MAX]++;//v[i] + MAX, pentru ca sunt si numere < 0
}
st = 0;
dr = k - 1;
max = min;
for (i = k; i < n; i++) {
fscanf(fin, "%d", &v[i]);
f[v[i - k] + MAX]--;
f[v[i] + MAX]++;
if (k == 1 || v[i] <= min) {//daca este minimul
min = v[i];
}
else if (v[i - k] == min) {//daca primul nr a fost minimul
while (f[min + MAX] == 0) {
min++;
}
}
//altfel minimul ramane neschimbat
if (min > max) {
max = min;
st = i - k + 1;
dr = i;
}
}
fclose(fin);
fout = fopen("secventa.out", "w");
fprintf(fout, "%d %d %d\n", st + 1, dr + 1, max);
fclose(fout);
return 0;
}