题意:
给你两个数组,数组里面的元素都已经按上升序拍好了,让你把这两个数组合并成上升序,并输出中位数
解析:
这道题开(2e5+10)*2的数组会内存超限..所以看题解是用优先队列,维护前(n+m+1)/2个小的数,然后不断push和pop
就可以了,然后最后输出堆顶的元素
然后这里虽然说数据范围是long int,但是你开long int好像会爆(题解说的),这道题数据其实好像只有int,所以直接开int就可以了
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <map>
#include <vector>
#include <cmath>
#include <queue>
#include <set>
using namespace std;
typedef pair<int,int> PII;
const int N = 2e5+1;
priority_queue<int> mq;
int main()
{
int n,m;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
int tmp;
scanf("%d",&tmp);
mq.push(tmp);
}
scanf("%d",&m);
int mid=(n+m+1)/2;
for(int i=1;i<=m;i++)
{
int tmp;
scanf("%d",&tmp);
mq.push(tmp);
while(mq.size()>mid)
{
mq.pop();
}
}
/*int u;
while(!mq.empty())
{
u=mq.top();
mq.pop();
}*/
printf("%d\n",mq.top());
}