Cod sursa(job #2375698)

Utilizator SweetHumanAvram Gheorghe SweetHuman Data 8 martie 2019 11:36:06
Problema Secventa Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.5 kb
#include <iostream>
#include <fstream>
#include <deque>
#include <vector>
#include <cstring>

using namespace std;
ifstream f1("secventa.in");
ofstream f2("secventa.out");

int n,k,indique,maximoIndico;
deque<int> indicusMaximus;
vector<int> numere;
char sir[3500005];
int main() {
    f1>>n>>k;
    f1.get();
    f1.getline(sir, 3500005);
    int p = strlen(sir);
    int nr;
    int semn = 1;
    for(int i=0;i<strlen(sir);i++){
        if(sir[i]=='-'){
            semn = -1;
            i++;
        }
        if(sir[i]<'0' || sir[i]>'9') continue;
        nr = 0;
        while(!(sir[i]<'0' || sir[i]>'9')){
            nr = nr*10 + (sir[i]-'0');
            i++;
        }
        nr = nr*semn;
        semn = 1;
        numere.push_back(nr);
    }
    indicusMaximus.push_back(0);
    for(int i=1;i<k;i++){
        while(!indicusMaximus.empty() && numere[indicusMaximus.back()]>numere[i])
            indicusMaximus.pop_back();
        indicusMaximus.push_back(i);
    }
    indique = k;
    maximoIndico = indicusMaximus.front();
    for(int i=k;i<n;i++){
        if(i-k==indicusMaximus.front())
            indicusMaximus.pop_front();
        while(!indicusMaximus.empty() && numere[indicusMaximus.back()]>numere[i])
            indicusMaximus.pop_back();
        indicusMaximus.push_back(i);
        if(numere[indicusMaximus.front()]> numere[maximoIndico]){
            indique = i+1;
            maximoIndico = indicusMaximus.front();
        }
    }
    f2<<indique-k+1<<" "<<indique<<" "<<numere[maximoIndico];
    return 0;
}