Cod sursa(job #42953)

Utilizator ciprifilipasFilipas Ciprian ciprifilipas Data 29 martie 2007 17:42:37
Problema Secventa Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.52 kb
/*
ID: Cipri
PROG: secventa
LANG: C++
*/
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <set>
#include <map>
#include <deque>
#include <stdio.h>

using namespace std;

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

int n, k, p, p1, inc, fin;

deque<int> q;
vector<int> a;

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

void Read()
{
     FILE* fin = fopen("secventa.in", "rt");
     
     fscanf(fin, "%d %d", &n, &k);
     a.resize(n+1);
     q.resize(k+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[i] = a[i];
     p = minim(0, k-1);
     for(int i = 1; i < n; i++)
     {
             if((i + k - 1) < n)
             {
                   q.pop_front();
                   q.push_back(a[i+k-1]);
                   p1 = minim(i, i+k-1);
                   if(p1 > p)
                   {
                         inc = i+1;
                         fin = i+k;
                         p = p1;
                   }
             }
     }
}

int minim(int st, int dr)
{
    int minim = 32001;
    for(int i = st; i <= dr; i++)
            if(a[i] < minim)
            {
                    minim = a[i];
            }
    return minim;
}

void Write()
{
     FILE* fout= fopen("secventa.out", "wt");
     fprintf(fout, "%d %d %d", inc, fin, p);
     fclose(fout);
}