set.insert()的返回值为pair(set<>::iterator, bool)
不得不说stl中的set要比不完全的堆priority_queue强大很多,毕竟是平衡树实现的
#include <bits/stdc++.h>
using namespace std;
typedef struct II
{
int cnt,id;
bool operator<(const II& a)const
{
if(cnt!=a.cnt) return cnt>a.cnt;
return id<a.id;
}
}II;
int T,n,m,x;
set<II> se;
unordered_map<int,set<II>::iterator> mp;
int main()
{
cin>>n>>m;
int x;
for(int i=1;i<=n;i++)
{
scanf("%d",&x);
if(se.size())
{
printf("%d:",x);
int j=0;
for(auto iter=se.begin();j<m&&iter!=se.end();++iter,++j)
printf(" %d",iter->id);
puts("");
}
if(mp.count(x))
{
int t=mp[x]->cnt;
se.erase(mp[x]);
mp[x]=se.insert({t+1,x}).first;
}else mp[x]=se.insert({1,x}).first;
}
return 0;
}