Pagini recente » Cod sursa (job #635527) | Cod sursa (job #1155568) | Cod sursa (job #225034) | Cod sursa (job #2866383) | Cod sursa (job #3241152)
#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;
}