Cod sursa(job #2815110)

Utilizator andreiiorgulescuandrei iorgulescu andreiiorgulescu Data 9 decembrie 2021 08:41:24
Problema Secventa Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.75 kb
#include <bits/stdc++.h>

using namespace std;

class InputReader {
    public:
        InputReader() {}
        InputReader(const char *file_name) {
            input_file = fopen(file_name, "r");
            cursor = 0;
            fread(buffer, SIZE, 1, input_file);
        }
        inline InputReader &operator >>(int &n) {
            while(buffer[cursor] < '0' || buffer[cursor] > '9') {
                advance();
            }
            int semn = 1;
            if (buffer[cursor] == '-')
                semn = -1, advance();
            n = 0;
            while('0' <= buffer[cursor] && buffer[cursor] <= '9') {
                n = n * 10 + buffer[cursor] - '0';
                advance();
            }
            n *= semn;
            return *this;
        }
    private:
        FILE *input_file;
        static const int SIZE = 1 << 17;
        int cursor;
        char buffer[SIZE];
        inline void advance() {
            ++ cursor;
            if(cursor == SIZE) {
                cursor = 0;
                fread(buffer, SIZE, 1, input_file);
            }
        }
};

InputReader in("secventa.in");
ofstream out("secventa.out");

int n,k,maxim = -1e9,st,dr,x;
deque<pair<int,int>>d;

int main()
{
    in >> n >> k;
    for (int i = 1; i <= n; i++)
    {
        in >> x;
        while (d.size() and d.front().second < i - k + 1)
            d.pop_front();
        while (d.size() and d.back().first >= x)
            d.pop_back();
        d.push_back(make_pair(x,i));
        if (i >= k and d.front().first > maxim)
        {
            maxim = d.front().first;
            st = i - k + 1;
            dr = i;
        }
    }
    out << st << " " << dr << " " << maxim;
    return 0;
}