題意:
給你兩個數組,數組裏面的元素都已經按上升序拍好了,讓你把這兩個數組合併成上升序,並輸出中位數
解析:
這道題開(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());
}