知识点:堆
看了看,发现这个题可以用对顶堆做,一个是大根堆,一个小根堆,但是不知道是这个题的细节比较多的原因还是我写法的问题,调了好久,一个小时,才过,明天要再想一下,这也是少有的洛谷把题目难度评低了的题,感觉难度在于第一个大根堆的大小是要变的,这个要是想清楚了应该就很简单了
#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 5;
int main() {
int n, m;
cin >> n >> m;
int a[N], b[N];
for (int i = 1; i <= n; i++) cin >> a[i];
for (int i = 1; i <= m; i++) cin >> b[i];
int ind1 = 1, ind2 = 1;
int get = 1;
priority_queue<int> q1;
priority_queue<int, vector<int>, greater<int>> q2;
while (ind1 <= n) {
q2.push(a[ind1]);
while (true) {
int n1 = (int) q1.size();
int n2 = (int) q2.size();
if (n1 == get && (!n2 || (n2 && q1.top() <= q2.top()))) break;
if (!n1) {
q1.push(q2.top());