Cod sursa(job #811024)

Utilizator PatrikStepan Patrik Patrik Data 11 noiembrie 2012 13:54:23
Problema Secventa Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.67 kb
    #include<cstdio>
    #include<cstring>
    #define MAX 500001
    #define BUFF_SIZE 7*MAX
    using namespace std;
    FILE *f;
    int n , k , v[MAX] , poz , max ;
    char buffer[BUFF_SIZE];

    void read();
    void solve();
    void write();

    int main()
    {
        read();
        solve();
        write();
        return 0;
    }

    void read()
    {
        f=fopen("secventa.in" , "r" );
        fscanf(f, "%d%d\n" , &n  ,&k );
        fgets(buffer , BUFF_SIZE , f );
        int j = 1 , semn = 1;
        int i = 0;
        while(buffer[i] != '\n' )
        {
            if(buffer[i] == ' ')
            {
                v[j] *= semn ;
                semn = 1;
                j++;
            }
            if(buffer[i] == '-')semn = -1;
            if(buffer[i] >= '0' && buffer[i] <= '9')
            v[j] = v[j] * 10 + buffer[i] - 48 ;
            i++;
        }
    }

    void solve()
    {
        int baza = v[1] ;
        for( int i = 2 ; i<= k ; ++i )
            if(v[i] < baza)
                baza = v[i];
        max = baza;
        poz = 1;
        for( int i = k+1 ; i <= n ; ++i )
        {
            if(v[i-k] == baza )
            {
                baza = v[i-k+1];
                for(int j = i-k+2 ; j <= i ; ++j )
                    if(v[j] < baza )
                        baza  = v[j];
                if(baza > max )
                {
                    max = baza;
                    poz = i-k+1;
                }
            }
        }
    }

    void write()
    {
          freopen("secventa.out" , "w" , stdout);
          printf("%d %d %d\n" , poz , poz+k-1 , max);
    }