Cod sursa(job #2314975)

Utilizator AlexandruPaulSirbu Alex AlexandruPaul Data 9 ianuarie 2019 12:12:43
Problema Secventa Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.15 kb
#include <iostream>
#include <fstream>
#include <deque>
using namespace std;
const int Maxx=5e5+2;
const int INF=(1<<30);
deque <int> Q;
ifstream fin("secventa.in");
ofstream fout("secventa.out");
string s;
int n,k;
int A[Maxx];
int st,dr,val=INF*-1;
void parsare();
int main() {
    fin>>n>>k;
    fin.get();
    getline(fin,s);
    parsare();
    for (int i=1;i<=n;++i){
        while (!Q.empty() && A[i]<=A[Q.back()]){
            Q.pop_back();
        }
        Q.push_back(i);
        if (i-k==Q.front()){
            Q.pop_front();
        }
        if (i>=k && val<A[Q.front()]){
            val=A[Q.front()];
            dr=i;
            st=i-k+1;
        }
    }
    fout<<st<<" "<<dr<<" "<<val;
    return 0;
}
void parsare(){
    int sign;
    int nr;
    int len=s.size(),i,ps=0;
    for (i=1;i<=len;++i){
        if (s[i]==' ') continue;
        if (s[i]=='-'){
            sign=-1;
            ++i;
        } else {
            sign=1;
        }
        nr=0;
        while ('0'<=s[i] && s[i]<='9'){
            nr=nr*10+(s[i]-'0');
            ++i;
        }
        nr*=sign;
        A[++ps]=nr;
    }
}