https://www.luogu.org/problemnew/show/P1801
可以用multiset水过,发现有超多数据结构可以处理这道题。==
线段树:https://blog.csdn.net/weishengmingerfendou/article/details/47144419
fhq-treap:https://blog.csdn.net/CABI_ZGX/article/details/79963427
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 2e5 + 10;
#define inf 2000000010
#define eps 0.000003
#define lson rt<<1, l, m
#define rson rt<<1|1, m+1, r
multiset<int> mp;
multiset<int> ::iterator it;
int a[maxn], q[maxn];
int main()
{
int n, m, x, k = 1;
scanf("%d%d", &n, &m);
register int i;
for(i = 1; i <= n; i++) scanf("%d", &a[i]);
for(i = 1; i <= m; i++) scanf("%d", &q[i]);
mp.insert(a[1]);
it = mp.begin();
if(q[1] == 1) printf("%d\n", a[1]), k++;
for(i = 2; i <= n; i++) {
mp.insert(a[i]);
if(a[i] < *it) it--;
while(q[k] == i) {
if(k != 1) it++;
printf("%d\n", *it);
k++;
}
}
}
滚去学习