1372:小明的账单
首先就犯了大意错误┭┮﹏┭┮,提交了下面这样的代码。
很明显,大根堆的最小值没有得到“清理”,同样小根堆的最大值也没有得到“清理”。
#include<iostream>
#include<cstdio>
#include<queue>
using namespace std;
priority_queue<int,vector<int>,greater<int>> hg;
priority_queue<int,vector<int>,less<int>>hl;
int main(){
int n;
cin>>n;
while(n--){
int m,t;
cin>>m;
for(int i=1;i<=m;i++){
scanf("%d",&t);
hg.push(t);hl.push(t);
}
printf("%d %d\n",hg.top(),hl.top());
hl.pop();hg.pop();
}
return 0;
}
然后看了大佬的题解,STL一点不会果然不行啊!(灬ꈍ ꈍ灬)
关于multiset可参考endl大佬。
注意:不用scanf/printf是过不了的。
#include<bits/stdc++.h>
using namespace std;
multiset<int> st;
int main(){
int n;
cin>>n;
st.clear();
for(int i=1;i<=n;i++){
int m;
scanf("%d",&m);
for(int j=1;j<=m;j++){
int a;
scanf("%d",&a);
st.insert(a);
}
printf("%d %d\n",*st.begin(),*(--st.end()));
st.erase(st.begin());
st.erase(--st.end());
}
return 0;
}