D - 纪念品领取
对于每次的抽签,我们可以直接将其往后放,即对于第 i i i 次抽签对应的人,我们就将其位置信息更新为 n + i n+i n+i ,最后通过排序,寻找位置最小的五个人按序号大小输出即可。
时间复杂度: O ( n log n ) O(n \log n) O(nlogn)
#include<bits/stdc++.h>
using namespace std;
typedef pair<int,int> PII;
int main()
{
int n,m;cin>>n>>m;
vector<PII> a(n+1);
for(int i=1;i<=n;i++) a[i]={0,i};
int cnt=1;
for(int i=0;i<m;i++)
{
int x;cin>>x;
a[x].first=cnt++;
}
sort(a.begin(),a.end());
set<int> c;
for(int i=1;i<=5;i++) c.insert(a[i].second);
for(auto &p:c)
cout<<p<<" ";
return 0;
}