码迷,mamicode.com
首页 > 其他好文 > 详细

NBUT 2014 F Team of Slime

时间:2014-05-09 11:50:08      阅读:262      评论:0      收藏:0      [点我收藏+]

标签:http   c   2014   html   htm   a   

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

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

分析:

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

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

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

NBUT 2014 F Team of Slime,布布扣,bubuko.com

NBUT 2014 F Team of Slime

标签:http   c   2014   html   htm   a   

原文地址:http://www.cnblogs.com/txd0u/p/3709038.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!