Cod sursa(job #2062339)

Utilizator CroitoruAlinCroitoru Alin CroitoruAlin Data 10 noiembrie 2017 11:39:09
Problema Secventa Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.46 kb
#include <iostream>
#include <fstream>
#include <deque>
using namespace std;
#define DIM 10000
char buff[10000];
int poz=0;

void citire(int &numar)
{
    freopen("secventa.in","r",stdin);
     numar=0;
     char semn='+';

     while (buff[poz]<'0'||buff[poz]>'9')
     {
          semn=buff[poz];
          if (++poz==DIM){
               fread(buff,1,DIM,stdin);
               poz=0;}
     }
     while ('0'<=buff[poz] && buff[poz]<='9')
     {
          numar=numar*10+buff[poz]-'0';
          if (++poz == DIM)
               fread(buff,1,DIM,stdin),poz=0;
     }
     if (semn=='-')
          numar=-numar;
}
int main()
{
    int n,k;
    int *v;
    citire(n);
    citire(k);
    v=new int[n+1];
    int i;
    for(i=1;i<=n;i++){
        citire(v[i]);
       }
    v[n]=v[n]/10;
    deque<int> d;
    for(int i=1;i<=k;i++){
         for(;!d.empty() && v[i]<=v[d.front()];)
            d.pop_front();
        d.push_front(i);}
    int sol=d.front();
    int prim,ultim;
    for(i=k+1;i<=n;i++){
        for(;!d.empty() && v[i]<=v[d.front()];)
            d.pop_front();
        d.push_front(i);
        if(!d.empty() && i-k>=d.back())
            d.pop_back();
        if(k<=i && v[d.back()]>sol)
        {
            sol=v[d.back()];
            prim=i-k+1;
            ultim=i;
        }
    }
    ofstream fout("secventa.out");
    fout<<prim<<" "<<ultim<<" "<<sol;
    fout.close();
    delete[] v;
    return 0;
}