当前位置:   article > 正文

Codeforces Round #704 (Div. 2) B. Card Deck(暴力)_b. card decktime limit per test1 second

b. card decktime limit per test1 second

 

 

 给出大小为 n 的排列,每次操作从后面开始取,取任意大小为 k 的长度组成一种新的排列,问最后这种排列字典序最大是多少 

其实很容易发现最优的排列应该类似于 n....n1....n2....n3...1 也就是说从后面开始找这几个点,但是不能够保证 n 之后我们要找的点是 n-1 ,因为 n-1 可能已经与 n 组成排列,所以利用一个数组来找到下一个需要找的点是什么即可 

  1. const int N=5e5+5;
  2. int n,m;
  3. int i,j,k;
  4. int a[N];
  5. bool vis[N];
  6. int main()
  7. {
  8. rush(){
  9. sd(n);
  10. for(int i=1;i<=n;i++) sd(a[i]);
  11. vector<int> ans;
  12. int res=n,pos=n;
  13. for(int i=n;i;i--){
  14. if(a[i]==res){
  15. vis[a[i]]=1;
  16. for(int j=i;j<=pos;j++) ans.pb(a[j]);
  17. pos=i-1;
  18. while(res--){
  19. if(!vis[res]) break;
  20. }
  21. } else{
  22. vis[a[i]]=1;
  23. }
  24. }
  25. for(int i=0;i<ans.size();i++) printf("%d ",ans[i]);
  26. puts("");
  27. for(int i=1;i<=n;i++) vis[i]=0;
  28. }
  29. }

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/54893
推荐阅读
相关标签
  

闽ICP备14008679号