zoukankan      html  css  js  c++  java
  • NBUT 2014 F Team of Slime

    题目链接:http://acm.nbut.edu.cn/Problem/view.xhtml?id=1557

    题意:给出n个不相同且分布在1-n之间的正整数组成的队列,每次可以将任一个数放到队首,问最少需要多少次可以将队列变为升序?

    分析:

    (1)一种方法是对于每个有较大数在前面的数放到队首,然后将后面比它小的数再按照从大到小的顺序放到队首,这样就能将队列变为升序,实现可以用线段树维护每个数的逆序数,可惜这样做不是最优的结果;

    (2)考虑下界:考虑不需要移动的数,最大数n无论如何是不需要移的,n-1如果出现在n前面也是无论如何不需要移的,而如果出现在n后面则无论如何是必须要移的,类推下去,会发现找一个n结束的按出现位置递增的序列,这个序列的数都是不需要移的,除此之外的数都是必须要移的,所以最小的移动次数是n减这个序列的长度。

    可以通过倒着遍历一遍,找出这样的序列,复杂度O(n)。

    (3)另一种思路:找出以n结尾的最大串首个数的前一个数(!)。

  • 相关阅读:
    Evaluation
    Version
    bzoj4184-shallot
    jQuery 获取并设置 CSS 类
    jQuery 删除元素
    jQuery 添加元素
    jQuery 设置内容和属性
    jQuery
    jQuery Chaining
    CI 框架增加公用函数-如何使用Helper辅助函数
  • 原文地址:https://www.cnblogs.com/txd0u/p/3709038.html
Copyright © 2011-2022 走看看