求长度为ui的区间的第i小的数,区间长度是递增的
为啥是priority_queue <int, vector < int >, greater< int >>呢,因为priority_queue<Type, Container, Functional>,要想指定仿函数,必须先指定容器,所以就这样写了
#include <cstdio>
#include <iostream>
#include <iomanip>
#include <string>
#include <cstdlib>
#include <cstring>
#include <queue>
#include <set>
#include <vector>
#include <map>
#include <algorithm>
#include <cmath>
#include <stack>
#define INF 0x3f3f3f3f
#define IMAX 2147483646
#define LINF 0x3f3f3f3f3f3f3f3f
#define ll long long
#define ull unsigned long long
#define uint unsigned int
using namespace std;
int n, m, now, x, a[30010];
priority_queue <int> q1;
priority_queue <int, vector<int>, greater<int>> q2;
int main() {
scanf("%d%d", &n, &m);
for (int i = 0; i < n; i++)
scanf("%d", a + i);
while (!q1.empty())
q1.pop();
while (!q2.empty())
q2.pop();
now = 0;
for (int i = 1; i <= m; i++) {
scanf("%d", &x);
while (now < x)
q1.push(a[now++]);
while (q1.size() > i) {
q2.push(q1.top());
q1.pop();
}
while (q1.size() < i) {
q1.push(q2.top());
q2.pop();
}
while (!q2.empty() && q1.top() > q2.top()) {
q2.push(q1.top());
q1.pop();
q1.push(q2.top());
q2.pop();
}
printf("%d\n", q1.top());
}
return 0;
}