Cod sursa(job #2062322)

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

void citire(int &numar)
{
    FILE *fin=fopen("secventa.in","r");
     numar=0;
     char semn='+';
     while (buff[poz]<'0'||buff[poz]>'9')
     {
          semn=buff[poz];
          if (++poz==DIM){
               fread(buff,1,DIM,fin);
               poz=0;}
     }
     while ('0'<=buff[poz] && buff[poz]<='9')
     {
          numar=numar*10+buff[poz]-'0';
          if (++poz == DIM)
               fread(buff,1,DIM,fin),poz=0;
     }
     if (semn=='-')
          numar=-numar;
          fclose(fin);
}
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]);
    deque<int> d;
    int sol=0;
    int prim,ultim;
    for(i=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;
}