Cod sursa(job #1312281)

Utilizator fluture.godlikeGafton Mihnea Alexandru fluture.godlike Data 9 ianuarie 2015 08:51:58
Problema Secventa Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.79 kb
#include <stdio.h>
#define DIM 10023
#define NMAX 500023
#define inf -30023
FILE *fin, *fout;
int n, k, temp, st = 1, dr = 0, poz = 0, p, max= inf;
char buff[DIM];
void citeste(int &numar)
{
    numar = 0;
    char semn = '+';
    while(buff[poz] > '9' || buff[poz] < '0')
    {
        semn = buff[poz];
        poz++;
        if(poz == DIM)
        {
            poz = 0;
            fgets(buff, DIM, fin);
        }
    }
    while(buff[poz] >= '0' && buff[poz] <= '9')
    {
        numar = numar*10 + buff[poz] - '0';
        poz++;
        if(poz == DIM)
        {
            poz = 0;
            fgets(buff, DIM, fin);
        }
    }
    if(semn == '-')
    {
        numar = -numar;
    }
}
struct chestie
{
    int val;
    int pos;
} deq[NMAX];
int main()
{
    fin = fopen("secventa.in", "r");
    fout = fopen("secventa.out", "w");
    //citeste(n);
    //citeste(k);
    fscanf(fin, "%d%d", &n, &k);
	for(int i = 1; i< k; i++)
    {
        //citeste(temp);
        fscanf(fin, "%d", &temp);
		while(temp <= deq[dr].val && dr >= st)
        {
            dr --;
        }
        dr++;
        deq[dr].val = temp;
        deq[dr].pos = i;
    }
    for(int i = k; i<= n; i++)
    {
        if(deq[st].pos +k <= i) st++;
        //citeste(temp);
        fscanf(fin, "%d", &temp);
		while(temp <= deq[dr].val && dr >= st)
        {
            dr --;
        }
        dr++;
        deq[dr].val = temp;
        deq[dr].pos = i;
        if(deq[st].val > max)
        {
        	max = deq[st].val;
        	p = deq[dr].pos;
        }
    }
    if(deq[st].val > max)
    {
        max = deq[st].val;
        p = deq[dr].pos;
    }
    fprintf(fout, "%d %d %d\n", p-k+1, p, max);
    fclose(fin);
    fclose(fout);
    return 0;
}