維護兩個隊列,
開A
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <vector>
#include <set>
#include <map>
#include <stack>
#include <queue>
using namespace std;
int a[31000];
int main()
{
int m, n;
scanf("%d %d", &m, &n);
int i, j;
for(i = 0;i < m;i++){
scanf("%d", &a[i]);
}
int k;
priority_queue<int, vector<int>, less<int> >big;
priority_queue<int, vector<int>, greater<int> >small;
j = 0;
int t;
for(i = 1;i <= n;i++){
scanf("%d", &k);
while(j < k){
small.push(a[j]);
if(!big.empty()&&small.top() < big.top()){
t = big.top();
big.pop();
big.push(small.top());
small.pop();
small.push(t);
}
j++;
}
printf("%d\n", small.top());
big.push(small.top());
small.pop();
}
return 0;
}