Cod sursa(job #3138060)

Utilizator horia.boeriuBoeriu Horia Andrei horia.boeriu Data 17 iunie 2023 12:18:07
Problema Secventa Scor 100
Compilator c-64 Status done
Runda Arhiva de probleme Marime 1.2 kb
#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;
}