马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#include <cstdio>
#include <cstring>
#include <string>
#include <iostream>
#include <algorithm>
#include <queue>
#define MAXN 200001
int n, m, a[MAXN], b[MAXN];
std::priority_queue<int> q1;
std::priority_queue<int, std::vector<int>, std::greater<int> > q2;
int main() {
scanf("%d %d", &n, &m);
for (int i = 1; i <= n; ++i) scanf("%d", &a[i]);
for (int i = 1; i <= m; ++i) scanf("%d", &b[i]);
int now = 1, cnt = 0;
for (int i = 1; i <= b[now]; ++i) {
q1.push(a[i]); //把所有的元素放进来
while (i == b[now]) { // 表示全部都放完了,放在了大根堆
++cnt;
while(q1.size() >= cnt) {
int x = q1.top(); q1.pop();
q2.push(x);
}
int ans = q2.top();
q1.push(ans), q2.pop();
printf("%d\n", ans);
++now;
}
}
return 0;
}
详细一点看不懂 |