Description

Matt’s friend K.Bro is an ACMer.

Yesterday, K.Bro learnt an algorithm: Bubble sort. Bubble sort will compare each pair of adjacent items and swap them if they are in the wrong order. The process repeats until no swap is needed.

Today, K.Bro comes up with a new algorithm and names it K.Bro Sorting.

There are many rounds in K.Bro Sorting. For each round, K.Bro chooses a number, and keeps swapping it with its next number while the next number is less than it. For example, if the sequence is “1 4 3 2 5”, and K.Bro chooses “4”, he will get “1 3 2 4 5” after this round. K.Bro Sorting is similar to Bubble sort, but it’s a randomized algorithm because K.Bro will choose a random number at the beginning of each round. K.Bro wants to know that, for a given sequence, how many rounds are needed to sort this sequence in the best situation. In other words, you should answer the minimal number of rounds needed to sort the sequence into ascending order. To simplify the problem, K.Bro promises that the sequence is a permutation of 1, 2, . . . , N .

 

Input

The first line contains only one integer T (T ≤ 200), which indicates the number of test cases. For each test case, the first line contains an integer N (1 ≤ N ≤ 10 6).

The second line contains N integers a i (1 ≤ a i ≤ N ), denoting the sequence K.Bro gives you.

The sum of N in all test cases would not exceed 3 × 10 6.

 

Output

For each test case, output a single line “Case #x: y”, where x is the case number (starting from 1), y is the minimal number of rounds needed to sort the sequence.
 

Sample Input

2
5
5 4 3 2 1
5
5 1 2 3 4
 

Sample Output

Case #1: 4
Case #2: 1

Hint

In the second sample, we choose “5” so that after the first round, sequence becomes “1 2 3 4 5”, and the algorithm completes. 

source:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=94498#problem/K这道题是从后往前做的,我想从前往后,试了确实不行,现在想通了,因为这道题是任选一个数字,然后按照冒泡法的思路来排列
那就是说,每一轮排列之后,最大的数字都沉底了,也就是说,对于任意一个数字,只要它的后面有比他小的数字,它就会沉底,
那就可以转化为判断一个数的后面有没有比它小的数字,如果有,这个数就要沉底,也就是进行一轮排列,
任选一个数让他沉底最好的情况就是,每一个数字沉底之后,他都排列在它最终所在的位置 方法:记录一个数后面所有数字中最小的数字,和这个数字比较,如果小于这个数字,那这个数就要沉底,也就是进行一轮排列
   从后往前刚好可以判断每一个数后面是否有比他小的数字,前一个计算的结果还可以被后面的计算利用 网上的比较好的解释:
 1:给出一个数列,每次随机选择一个数,按照冒泡排序的方法去交换,问这种排序最快需要几个回合
   思路:如果某个数右边有比他小的数字,那这个数一定要被扔到后边去。所以线性方法统计有多少个这样的数字即可 
 
 2:从后往前,存在一组递增子数列则ans加1,因为对于每个这样的递增子序列我们都最少需要选择一次将其排序
/*
问题:给定一个序列,用给定的排序方法把它从小到大排列
给定方法:任意选择一个数,依次找后边比他小的数,并交换这两个数,直到后边没哟比他小的数
称这样的一次操作为一轮
问多少轮操作之后排序成功
分析:从后往前找递增序列数,对于每个递增序列,至少需要移动一次
*/
#include <iostream>
#include <stdio.h>
#define max_num 1000000+10
int num[max_num];
int main()
{
int t, case_num = ;
scanf("%d", &t);
while(t--)
{
int n, cnt = , mi;
scanf("%d", &n);
for(int i = ; i < n; i++)
scanf("%d", &num[i]);
mi = num[n-];
for(int i = n-; i >= ; i--)
{
if(num[i] < mi)
mi = num[i];
else
cnt++;
}
printf("Case #%d: %d\n", ++case_num, cnt);
}
return ;
}

K - K.Bro Sorting的更多相关文章

  1. 树状数组--K.Bro Sorting

    题目网址: http://acm.hust.edu.cn/vjudge/contest/view.action?cid=110064#problem/D Description Matt’s frie ...

  2. HDU 5122 K.Bro Sorting

    K.Bro Sorting Time Limit: 2000/2000 MS (Java/Others) Memory Limit: 512000/512000 K (Java/Others) Tot ...

  3. K.Bro Sorting

    Time Limit: 2000/2000 MS (Java/Others)    Memory Limit: 512000/512000 K (Java/Others)Total Submissio ...

  4. 基础题:HDU 5122 K.Bro Sorting

    Matt's friend K.Bro is an ACMer.Yesterday, K.Bro learnt an algorithm: Bubble sort. Bubble sort will ...

  5. HDU 5122 K.Bro Sorting(模拟——思维题详解)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5122 Problem Description Matt's friend K.Bro is an A ...

  6. hdoj 5122 K.Bro Sorting 贪心

    K.Bro Sorting Time Limit: 2000/2000 MS (Java/Others) Memory Limit: 512000/512000 K (Java/Others) Tot ...

  7. K.Bro Sorting(思维题)

    K.Bro Sorting Time Limit: 2000/2000 MS (Java/Others)    Memory Limit: 512000/512000 K (Java/Others)T ...

  8. 61. 从1到n,共有n个数字,每个数字只出现一次。从中随机拿走一个数字x,请给出最快的方法,找到这个数字。如果随机拿走k(k>=2)个数字呢?[find k missing numbers from 1 to n]

    [本文链接] http://www.cnblogs.com/hellogiser/p/find-k-missing-numbers-from-1-to-n.html  [题目] 从1到n,共有n个数字 ...

  9. poj3208 Apocalypse Someday 数位dp+二分 求第K(K <= 5*107)个有连续3个6的数。

    /** 题目:poj3208 Apocalypse Someday 链接:http://poj.org/problem?id=3208 题意:求第K(K <= 5*107)个有连续3个6的数. ...

随机推荐

  1. BZOJ 2314: 士兵的放置( 树形dp )

    树形dp... dp(x, 0)表示结点x不放士兵, 由父亲控制: dp(x, 1)表示结点x不放士兵, 由儿子控制: dp(x, 2)表示结点x放士兵. ---------------------- ...

  2. js中||和&&的用法

    在js中&&.||不一定都是用来判断一个表达式的逻辑值是true.false,更多的是用来依据真值或者假值执行相应操作! a() && b() :如果执行a()后返回t ...

  3. css布局: 两栏 自适应高度

    只使用css实现 有两种方式, 一种是通过相对定位,再绝对定位获取父亲元素的高度, 一种是通过margin-bottom:-999em;padding-bottom: 999em; 父亲元素超出隐藏 ...

  4. [LeetCode]题解(python):080-Remove Duplicates from Sorted Array II

    题目来源: https://leetcode.com/problems/remove-duplicates-from-sorted-array-ii/ 题意分析: 跟定一个排好序的数组.修改这个数组使 ...

  5. libcprops

    Install Howto Download the latest epel-release rpm from http://dl.fedoraproject.org/pub/epel/6/x86_6 ...

  6. 滚动条QScroolBar实现滚屏功能(屏幕过大,覆盖wheelEvent来处理滑轮事件)

    环境:Qt5 编译器:Qt Creator 需求:如图 显示区域win 600*300 需要显示的Widget控件show 590*550 则有600*250的show界面无法显示 使用滑块控制sho ...

  7. curl 返回响应头

    demo:/root# curl -i baidu.com HTTP/1.1 200 OK Date: Wed, 27 Jul 2016 08:50:03 GMT Content-Type: text ...

  8. 推荐一些socket工具,TCP、UDP调试、抓包工具 推荐一些socket工具,TCP、UDP调试、抓包工具

    还记得我在很久很久以前和大家推荐的Fiddler和Charles debugger么?他们都是HTTP的神器级调试工具,非常非常的好用.好工具能让你事半功倍,基本上,我是属于彻头彻尾的工具控. 假如有 ...

  9. 用elasticsearch索引mongodb数据

    参照网页:单机搭建elasticsearch和mongodb的river 三个步骤: 一,搭建单机replicSet二,安装mongodb-river插件三,创建meta,验证使用 第一步,搭建单机m ...

  10. linux驱动调试--段错误之oops信息分析

    linux驱动调试--段错误之oops信息分析 http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=29401328&id= ...