Cod sursa(job #42782)

Utilizator ciprifilipasFilipas Ciprian ciprifilipas Data 29 martie 2007 15:24:46
Problema Secventa Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.64 kb
/*
Nume: Cipri Filipas
Problema: Secventa infoarena
*/

#include <stdio.h>
#include <deque>
#include <vector>

using namespace std;

void Read();
void Write();
void Solve();
int minim(int st, int dr);

vector<int> a;
deque<int> q;
int n, k, p, pos, init, fin;

FILE* fout = fopen("secventa.out", "wt");

int main()
{
    Read();
    Solve();
    Write();
    
    return 0;
}

void Read()    
{
    FILE* fin =  fopen("secventa.in", "rt");
    
    fscanf(fin, "%d %d", &n, &k);
    //q.resize(k+1);
    a.resize(n+1);
    for(int i = 0; i < n; i++)
        fscanf(fin, "%d", &a[i]);
    fclose(fin);
}

void Solve()
{
    for(int i = 0; i < k; i++)
        q.push_back(a[i]);
    p = minim(0, k-1);
    for(int i = 1; i < n; i++)
    {
        /*i = pos;
        pos = 0;*/
        if(i+k-1 < n)
        {
            q.pop_front();
            q.push_back(a[i+k-1]);
            if(p < minim(i, i+k-1)) 
            {
                /*for(int j = 0; j < k; j++)
                        fprintf(fout, "%d ", q[j]);
                fprintf(fout, "\n");*/
                init = i+1;
                fin = i + k;
                p = minim(i, i+k-1);
                //fprintf(fout, "%d\n", p);
            }
        }
    }    
}            

void Write()    
{
        fprintf(fout, "%d %d %d", init, fin, p);

    fclose(fout);
    
}    
    
int minim(int st, int dr)
{
    int minim = 10000000;
    for(int i = st; i <= dr; i++)
    {
        if(a[i] < minim) 
        {
            minim = a[i];
            //pos = i;
        }    
    }    
    return minim;
}