版权声明: https://blog.csdn.net/Dream_Weave/article/details/81985935
题目链接:点击打开链接
题目大意:略。
解题思路:略。
AC 代码
#include<bits/stdc++.h>
#include<cmath>
#define mem(a,b) memset(a,b,sizeof a)
#define ssclr(ss) ss.clear(), ss.str("")
#define INF 0x3f3f3f3f
#define MOD 1000000007
using namespace std;
typedef long long ll;
const int maxn=5e5+10;
struct node
{
int val,cnt;
node(int val,int cnt):val(val),cnt(cnt){}
bool operator<(const node &nd)const
{
//return false 数据插入失败,而不是(插入成功,只是位置不一样)。
return cnt!=nd.cnt ? cnt>nd.cnt : val<nd.val ;
}
};
set<node> st;
int mp[maxn];
int main()
{
int n,k,a,l;
scanf("%d%d",&n,&k);
for(int i=0;i<n;i++)
{
scanf("%d",&a);
if(i)
{
printf("%d:",a);
l=0;
for(auto it=st.begin(); it!=st.end()&&l<k; it++)
{
l++;
printf(" %d",(*it).val);
}
puts("");
}
auto it=st.find(node(a,mp[a]));
if(it!=st.end()) st.erase(it);
mp[a]++;
st.insert(node(a,mp[a]));
}
return 0;
}