Codeforces Round #552 (Div. 3) E. Two Teams(set+模拟)
发布日期:2021-05-08 15:19:06 浏览次数:30 分类:精选文章

本文共 779 字,大约阅读时间需要 2 分钟。

在这里插入图片描述
在这里插入图片描述
思路:模拟一下这个筛选的过程,每次用set的find找到最大的那个数,然后向左找k个。向右找k个,找到后把他们从Set里erase就行了,每次最大的那个数的话可以先排序后存队列里,每次取队首就是最大元素了。

#include 
using namespace std;typedef long long ll;const int maxn=2e5+1;pair
v[maxn];vector
p;set
s;queue
q;bool cmp(const pair
&a,const pair
&b){ return a.first>b.first;}int main(){ int n,k,cnt=1,ans[maxn]; scanf("%d %d",&n,&k); for(int i=1;i<=n;++i) scanf("%d",&v[i].first),v[i].second=i; sort(v+1,v+1+n,cmp); for(int i=1;i<=n;++i) q.push(v[i].second),s.insert(i); while(!s.empty()) { p.clear(); while(!s.count(q.front())) q.pop(); int t=q.front(); q.pop(); auto it1=s.find(t),it2=s.find(t); for(int i=0;i<=k;++i) { p.push_back(*it1); if(it1==s.begin()) break; --it1; } for(int i=0;i
上一篇:Codeforces Round #552 (Div. 3) G. Minimum Possible LCM(数论)
下一篇:NC15553 数学考试(线性DP)

发表评论

最新留言

感谢大佬
[***.8.128.20]2025年04月15日 12时30分25秒