Cod sursa(job #3243580)

Utilizator Mihai_999Diaconeasa Mihai Mihai_999 Data 19 septembrie 2024 17:37:42
Problema Componente tare conexe Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.18 kb
#include <iostream>
#include <fstream>
#include <deque>
#define nl '\n'

using namespace std;

ifstream fin("vila2.in");
ofstream fout("vila2.out");

const int NMAX = 1e5+5;

int n, k, v[NMAX], maxdif;
deque<int> mini, maxi;

int main()
{
    fin >> n >> k;
    for (int i = 1; i <= n; i++)
        fin >> v[i];
    for (int i = 1; i <= k+1; i++)
    {
        while (!mini.empty() && v[i] <= v[mini.back()])
            mini.pop_back();
        mini.push_back(i);
        while (!maxi.empty() && v[i] >= v[maxi.back()])
            maxi.pop_back();
        maxi.push_back(i);
    }
    maxdif = v[maxi.front()] - v[mini.front()];
    for (int i = k+2; i <= n; i++)
    {
        while (!mini.empty() && v[i] <= v[mini.back()])
            mini.pop_back();
        if (!mini.empty() && i-mini.front() > k)
            mini.pop_front();
        mini.push_back(i);
        while (!maxi.empty() && v[i] >= v[maxi.back()])
            maxi.pop_back();
        if (!maxi.empty() && i-maxi.front() > k)
            maxi.pop_front();
        maxi.push_back(i);
        maxdif = max(maxdif, v[maxi.front()] - v[mini.front()]);
    }
    fout << maxdif;
    return 0;
}