Cod sursa(job #2911411)

Utilizator ArseniuVictorStefanArseniu Victor Stefan ArseniuVictorStefan Data 29 iunie 2022 12:04:17
Problema Secventa Scor 70
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.58 kb
#include <fstream>
#include <vector>
#include <set>
#include <deque>

using namespace std;

ifstream cin("secventa.in");
ofstream cout("secventa.out");

int main1() /// O(Nlog(K))
{
    ios_base::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);

    int n, k;
    cin >> n >> k;
    vector<int> a(n);
    for(int i = 0; i < n; i++)
        cin >> a[i];

    multiset<int> cnt;
    for(int i = 0; i < k; i++)
        cnt.insert(a[i]);
    int mini = *cnt.begin(), l = 0;

    for(int i = k; i < n; i++)
    {
        cnt.erase(cnt.find(a[i - k]));
        cnt.insert(a[i]);
        if(*cnt.begin() > mini)
        {
            mini = *cnt.begin();
            l = i - k + 1;
        }
    }

    cout << l + 1 << ' ' << l + k << ' ' << mini << '\n';
    return 0;
}

int main() /// O(N) - deque
{
    int n, k;
    cin >> n >> k;
    vector<int> a(n);
    for(int i = 0; i < n; i++)
        cin >> a[i];

    deque<int> deq;
    for(int i = 0; i < k; i++)
    {
        while(!deq.empty() && a[deq.back()] >= a[i])
            deq.pop_back();
        deq.push_back(i);
    }

    int maxi = deq.front(), r = k - 1;
    for(int i = k; i < n; i++)
    {
        while(!deq.empty() && deq.front() <= i - k)
            deq.pop_front();
        while(!deq.empty() && a[deq.back()] >= a[i])
            deq.pop_back();
        deq.push_back(i);
        if(a[maxi] < a[deq.front()])
        {
            maxi = deq.front();
            r = i;
        }
    }

    cout << r - k + 2 << ' ' << r + 1 << ' ' << a[maxi] << '\n';
    return 0;
}