不是说将原数变为相反数再放入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;
}