PAT 1029 Median (25 分)(level 1)(STL優先隊列)

題目鏈接

題意:

給你兩個數組,數組裏面的元素都已經按上升序拍好了,讓你把這兩個數組合併成上升序,並輸出中位數

解析:

這道題開(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());
	
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章