Cod sursa(job #1388729)

Utilizator kagy85Kolumban Antal kagy85 Data 15 martie 2015 17:51:39
Problema Secventa Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 1.36 kb
#include <stdio.h>
#include <stdlib.h>

//elemek szam
#define MAXN 500001
#define MAXNR 60001
//a minmum etek
#define MIN_V -30000
#define A 30000

short a[MAXN];
unsigned char v[MAXNR]={0};
unsigned long n, k, o;

short read_short(FILE * f)
{
    short r=0;
    char ct=fgetc(f), minus=0;

    while ((ct=='\n')||(ct==' '))
        ct=fgetc(f);
    if (ct=='-')
    {
        minus=1;
        ct=fgetc(f);
    }
    do
    {
        r=10*r+(ct-'0');
        ct=fgetc(f);
    }
    while ((ct>='0')&&(ct<='9'));

    return minus ? -r : r;
}

int main()
{
    FILE * fi, *fo;
    short t, minim=A+1, mini_max=MIN_V-1;
    unsigned long i, j, mini_max_idx=0;

    o=0;
    fi=fopen("secventa.in", "rt");
    fo=fopen("secventa.out", "wt");
    fscanf(fi, "%lu%lu", &n, &k);
    for (i=0; i!=n; i++)
    {
        t=read_short(fi);
        if (i>=k)
        {
            v[a[i-k]+A]--;
            if ((v[a[i-k]+A]==0)&&(a[i-k]==minim))
            {
                for (j=a[i-k]+A; v[j]==0; j++); //uj minimum kereses
                minim=j-A;
            }
        }
        a[i]=t;
        v[t+A]++;
        if (t<minim)
            minim=t;
        if ((i>=k-1)&&(minim>mini_max))
        {
            mini_max=minim;
            mini_max_idx=i;
        }
    }
    fprintf(fo, "%lu %lu %hd", mini_max_idx-k+2, mini_max_idx+1, mini_max);
    fclose(fi);
    fclose(fo);

    return 0;
}