求助解决问题
查看原帖
求助解决问题
210854
guojunwei楼主2022/5/30 21:14

不是说将原数变为相反数再放入priority_queue中就会变成小根堆吗?可是这个代码我查了半天不知为什么,有人帮帮忙看看为什么吗?

#include<iostream>
#include<cstdio>
#include<stack>
#include<queue>
using namespace std;
queue<int> que;
stack<int> stk;
priority_queue<int> gh,lh;
int tmp[10];
int main(){
	int n;
	scanf("%d",&n);
	for(int i=1;i<=n;i++){
		int op;
		scanf("%d",&op);
		if(op==1){
			int val;
			scanf("%d",&val);
			que.push(val);
			stk.push(val);
			gh.push(val);
			lh.push(-val);
		}
		else{
			int val;
			scanf("%d",&val);
			if(que.empty()) tmp[1]=1;
			else if(que.front()!=val) tmp[1]=1;
			if(stk.empty()) tmp[2]=1;
			else if(stk.top()!=val) tmp[2]=1;
			if(gh.empty()) tmp[3]=1;
			else if(gh.top()!=val) tmp[3]=1;
			if(lh.empty()) tmp[4]=1;
			else if(lh.top()!=-val) tmp[4]=1;
			if(!que.empty()) que.pop();
			if(!stk.empty()) stk.pop();
			if(!gh.empty()) gh.pop();
			if(!lh.empty()) lh.pop();
		}
	}
	for(int i=1;i<=4;i++){
		if(!tmp[i]) printf("Yes\n");
		else printf("No\n");
	}
	return 0;
}
2022/5/30 21:14
加载中...