Cod sursa(job #2591514)

Utilizator bem.andreiIceman bem.andrei Data 30 martie 2020 17:59:04
Problema Secventa Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.61 kb

#include <iostream>
#include <fstream>
#include <deque>

using namespace std;
ifstream r("secventa.in");
ofstream w("secventa.out");
deque<int>d;
int v[500002];
int citire()
{
    char c;
    int m=0, p=1;
    c=r.get();
    if(c=='-')
    {
        p=-1;
        c=r.get();
    }
    while(c!=' ' && c!='\n')
    {
        m=m*10+c-'0';
        c=r.get();
    }
    return m*p;
}
int main()
{
    int n, k, maxim=-30001, xf=0, yf=0;
    r>>n>>k;
    r.get();
    for(int i=0; i<n; i++)
    {
        v[i]=citire();
        if(i<k-1)
        {
            while(d.size()!=0 && v[i]<d.back())
            {
                d.pop_back();
            }
            d.push_back(v[i]);
        }
        else
        {
            if(i>=k && v[i-k]==d.front())
            {
                d.pop_front();
            }
            while(d.size()!=0 && v[i]<d.back())
            {
                d.pop_back();
            }
            d.push_back(v[i]);
            if(d.front()>maxim)
            {
                maxim=d.front();
                xf=i;
                yf=i-k+1;
            }
            else if(d.front()==maxim)
            {
                if(v[i]<v[xf])
                {
                    xf=i;
                    yf=i-k+1;
                }
                else if(v[i]==v[xf])
                {
                    if(v[i-k+1]<v[yf])
                    {
                        xf=i;
                        yf=i-k+1;
                    }
                }
            }
        }
    }
    w<<yf+1<<" "<<xf+1<<" "<<maxim;
    return 0;
}