Problem E: 穷游中国在统题
Description
Travel_poorly队是广工大目前最年轻的金牌队伍,队内成员分别是tmk、YFQ、Maple。这天他们接到教练的order要给新生杯统题,统题是个不轻松的工作,要评估各个题目的难度,设计出一套有梯度的套题,使得做题的情况有区分度。tmk很快想出了解决的办法,他给每道题目都设置了一个难度值,然后按照难度值进行筛选题目,这时候他发现难度值刚开始有可能是无序的,于是他决定要让全部题目都按照难度值从小到大排好序。 这时候YFQ说让他来排序,排序是一个展现算法魅力的过程,他要通过一种有趣的方法来给题目的难度值排序: 首先他把题目划分成很多组,每组的题目都是连续的,例如某一组包含从i到j的题目,那么这一组包含的是第i,i+1,i+2,i+3,...,j题。 这样每道题都属于某一个组,然后他再到组内把题目按照难度值进行从小到大排序。 当每个组内都进行排序之后,最终全部题目的难度值将按照从小到大的顺序排列好。 我们知道每一组里面的题目越多,排序的压力就越大,所以Maple提出一个合理的要求,就是让每个组里面的题目数量尽可能的少,聪明的ACMer,你知道Travel_poorly一共要分出多少个组吗?
Input
第一行是一个整数t ( t<= 10 ),表示有t组数据。在每组数据中: 第一行是一个整数n ( n<=1000 00 ),表示题目的总数; 第二行是n个整数A1,A2,A3...An ( 0<=Ai<= 1000 000 000),表示每道题目的难度值
Output
对于每组数据,输出一个正整数,表示一共要分出多少个组能满足Travel_poorly的要求,每两组样例之间输出一个空行。
Sample Input
2
5
3 2 5 4 6
5
5 4 3 2 1
Sample Output
3
1
【分析】
需要一点点思想的题目...稍微模拟一下就可以发现,某一个数所在的区间,最起码都是它当前的位置到排序后的位置这一个区间
也就是说
比如 3 2 5 4 6
排序之后是 2 3 4 5 6
那么排序后的2所谓的位置到排序前2所在的位置这一个区间是必须被分在一个区间内的。
所以题目就变成了判断原来位置和排序后位置的区间的问题
显然相交的区间需要合并成一个区间
然后计算区间个数即可
这道题有一个问题,就是如果当难度值一样的时候,当然是按照原来的顺序比较好
所以我的程序wa了一次...就是因为忘记考虑快排的不稳定性....
【代码】