Cod sursa(job #2718712)

Utilizator pimao2004Lupu Stefan Dragos pimao2004 Data 9 martie 2021 02:01:02
Problema Secventa Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.64 kb
#include <bits/stdc++.h>
using namespace std;
ofstream out ("secventa.out");
int v[500007];
deque<int> dq;
class InParser {
  private:
    vector<char> str;
    int ptr;
    ifstream fin;

    char getChar() {
        if (ptr == (int) str.size()) {
            fin.read(str.data(), str.size());
            ptr = 0;
        }
        return str[ptr++];
    }

    template<class T>
    T getInt() {
        char chr = getChar();
        while (!isdigit(chr) && chr != '-')
            chr = getChar();
        int sgn = +1;
        if (chr == '-') {
            sgn = -1;
            chr = getChar();
        }
        T num = 0;
        while (isdigit(chr)) {
            num = num * 10 + chr - '0';
            chr = getChar();
        }
        return sgn * num;
    }

  public:
    InParser(const char* name) : str(1e5), ptr(str.size()), fin(name) { }
    ~InParser() { fin.close(); }

    template<class T>
    friend InParser& operator>>(InParser& in, T& num) {
        num = in.getInt<T>();
        return in;
    }
};
int main()
{
    InParser in("secventa.in");
    int n,k;
    in>>n;
    in>>k;
    int x;
    int maxmin=-100000;
    int p1,p2;
    for(int i=1;i<=n;i++)
    {
        in>>v[i];
        while(!dq.empty()&&v[dq.back()]>=v[i])
            dq.pop_back();
        dq.push_back(i);
        if(i-dq.front()==k)
            dq.pop_front();
        if(i>=k)
        {
            if(maxmin<v[dq.front()])
            {
                maxmin=v[dq.front()];
                p2=i;
                p1=i-k+1;
            }
        }
    }
    out<<p1<<' '<<p2<<' '<<maxmin;
    return 0;
}