Cod sursa(job #2591476)

Utilizator bem.andreiIceman bem.andrei Data 30 martie 2020 16:43:52
Problema Secventa Scor 70
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.66 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;
    bool neg=false;
    c=r.get();
    while(c!=' ' && c!= EOF){
        if(c=='-'){
            neg=true;
        }
        else{
            m=m*10+c-'0';
        }
        c=r.get();
    }
    if(neg==true){
        return -m;
    }
    return m;
}
int main()
{
    int n, k, maxim=-30001, x=0, y=k-1, 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(i<xf)
                {
                    xf=i;
                    yf=i-k+1;
                }
                else if(i==xf)
                {
                    if(i-k+1<yf)
                    {
                        xf=i;
                        yf=i-k+1;
                    }
                }
            }
        }
    }
    w<<yf+1<<" "<<xf+1<<" "<<maxim;
    return 0;
}