Cod sursa(job #1312207)

Utilizator fluture.godlikeGafton Mihnea Alexandru fluture.godlike Data 8 ianuarie 2015 23:34:44
Problema Secventa Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.73 kb
#include <stdio.h>
#define MAX -30023
#define NMAX 500023
#define DIM 10000
char buff[DIM];
FILE *fin, *fout;
int poz = 0, n, k, temp, max = MAX, dr = 0, st = 1, p1;
bool g, f;
struct deq
{
       int val;
       int poz;
} d[NMAX];
int numar();
int main()
{
    fin = fopen("secventa.in", "r");
    fout = fopen("secventa.out", "w");
    n = numar();
    k = numar();
    for(int i = 1; i< k; i++)
    {
            temp = numar();
            if(!f)
            {
                  f = 1;
                  dr++;
                  d[dr].val = temp;
                  d[dr].poz = i;
                  continue;
            }
            while(dr>=st && temp <= d[dr].val) dr--;
            dr++;
            d[dr].val = temp;
            d[dr].poz = i;
    }
    for(int i =k; i<=n; i++)
    {
            while(d[st].poz <= i-k) st++;
            temp = numar();
            while(dr>=st && temp <= d[dr].val) dr--;
            dr++;
            d[dr].val = temp;
            d[dr].poz = i;
            if(d[st].val > max)
            {
                         max = d[st].val;
                         p1 = d[dr].poz;
            }
    }
    fprintf(fout, "%d %d %d\n", p1-k+1, p1, max);
    fclose(fin);
    fclose(fout);
    return 0;
}
int numar()
{
    int numar = 0;
     
    while(buff[poz] < '0' || buff[poz] > '9')
    {
        poz++;
        if(poz == DIM)
        {
            poz = 0;
            fgets(buff, DIM, fin);
        }
        if(buff[poz] == '-') g = 1;
    }
    while(buff[poz] >= '0' && buff[poz] <='9')
    {
        numar = numar*10 + buff[poz]-'0';
        poz++;
    }
    if(g)
    {
        g = 0;
        return 0-numar;
    }
    return numar;
}