Cod sursa(job #3241152)

Utilizator slol003Rizea Alexandru-Gabriel slol003 Data 27 august 2024 10:59:49
Problema Multiplu Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.34 kb
#include <bits/stdc++.h>

using namespace std;

const int Nmax = 300005;

int a[Nmax], sol[Nmax];
int n, k, L;
multiset<int> S1, S2;

void Solve() {

    for(int i = 1; i <= k; i++) {
        S1.insert(a[i]);
    }
    for(int i = k + 1; i <= L; i++) {
        if(a[i] < *S1.rbegin()) {
            S2.insert(*S1.rbegin());
            S1.erase(--S1.end());
            S1.insert(a[i]);
        }
        else {
            S2.insert(a[i]);
        }
    }

    sol[1] = *S1.rbegin();
    for(int poz = 2; poz <= n - L + 1; poz++) {
        auto it = S1.find(a[poz - 1]);
        if(it != S1.end()) {
            S1.erase(it);
            S1.insert(a[poz + L - 1]);
        }
        else {
            S2.erase(S2.find(a[poz - 1]));
            S2.insert(a[poz + L - 1]);
        }
        if(*S1.rbegin() > *S2.begin()) {
            int x = *S1.rbegin();
            int y = *S2.begin();
            S1.erase(--S1.end());
            S2.erase(S2.begin());
            S1.insert(y);
            S2.insert(x);
        }
        sol[poz] = *S1.rbegin();
    }
}

int main() {

    cin >> n >> k >> L;
    for(int i = 1; i <= n; i++) {
        cin >> a[i];
    }
    Solve();
    int Q;
    cin >> Q;
    while(Q--) {
        int poz;
        cin >> poz;
        cout << sol[poz] << "\n";
    }
    return 0;
}