Cod sursa(job #1987448)

Utilizator armigheGheorghe Liviu Armand armighe Data 30 mai 2017 19:57:25
Problema Secventa Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include<fstream>
#include<climits>
using namespace std;
ifstream f("secventa.in");
ofstream g("secventa.out");
int v[500002],dq[500002];
int main()
{
    int n,k,i,st=1,dr=0,maxim=INT_MIN,pi=0,pf=0;
    f>>n>>k;
    for(i=1;i<=n;i++)
    {
        f>>v[i];
        // Cat timp elementul curent este mai mic decat ultimul element din deque, eliminam pozitia ultimului element din deque
        while (st <= dr && v[i] <= v[ dq[dr] ]) dr--;
        // Adaugam pozitia elementului curent in deque
        dq[++dr] = i;

        // Daca elementul minim coincide cu cel de pe pozita i-K, ii eliminam pozitia din deque, deoarece acesta nu mai conteaza pentru pasii >= i
        if (dq[st] == i-k) st++;

        // Afisam minimul, acesta aflandu-se in varful deque-ului
        if (i >= k)
        {
            if(v[dq[st]]>maxim)
                maxim=v[dq[st]],pi=i-k+1,pf=i;
        }
    }
    g<<pi<<" "<<pf<<" "<<maxim;
    return 0;
}