博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
中南大学第一届长沙地区程序设计邀请赛 New Sorting Algorithm
阅读量:7138 次
发布时间:2019-06-28

本文共 2799 字,大约阅读时间需要 9 分钟。

1352: New Sorting Algorithm

Time Limit: 1 Sec  
Memory Limit: 128 MB

Description

    We are trying to use a new sorting algorithm to sort a sequence with distinct integers.

    This algorithm will be end if the sequence is already in increasing order from left to right. Or for each step, suppose x is the leftmost integer, and y is the largest integer which is smaller than x in this sequence, we will move x to the right of y if y exists, otherwise we will move x to the right of the rightmost integer.
    So, how many steps will we use to sort a specific sequence with distinct integers by this new sorting algorithm?
    For example, we will use 7 steps to sort the sequence 7 1 5 2:
    7 1 5 2 --> 1 5 7 2 --> 5 7 2 1 --> 7 2 5 1 --> 2 5 7 1 --> 5 7 1 2 --> 7 1 2 5 --> 1 2 5 7

Input

    The first line has an integer T, means there are T test cases.

    For each test case, there is one integer N (2 <= N <= 105) in the first line, means the sequence has N distinct integers. Then there are N integers in the next line describing this sequence. Every integer of this sequence is in range [0, 109].
    The size of the input file will not exceed 5MB.

Output

    For each test case, print an integer in one line, indicates the number of steps we will use to sort this sequence by the new soring algorithm.

Sample Input

333 7 847 1 5 255 4 3 2 1

Sample Output

0710

HINT

 

Source

 

   对于节点X 。f(x)=i+1 。 {X-1 ,X -2 ,...X-i}均在X左端出现。

 1、1的右边没有升序排列好  。   

Ans=  f(1) + f(2) +.....f(N) ;

 2 、1的右边升序排列好

 Ans=  f(num[1]) + f(num[2]) +.....f(num[1所在位置-1]) ;

#include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define Max(a,b) ((a)>(b)?(a):(b))#define Min(a,b) ((a)<(b)?(a):(b))typedef long long LL ;using namespace std;const int Max_N = 100008 ;struct Node{ int id ; int num ; friend bool operator < (const Node A ,const Node B){ return A.num < B.num ; }};Node node[Max_N] ;int Left[Max_N] ;int num[Max_N] ;int N ;int find_Left(int x){ if(Left[x] == x) return x ; else return Left[x] = find_Left(Left[x]) ;}LL gao(){ LL sum = 0 ; int R ,i , j ,ok = 0 ; for(i = node[1].id ; i < N ; i++){ if(num[i] > num[i+1]){ ok = 1 ; break ; } } if(ok) R = N ; else R = node[1].id - 1 ; for(i = 1 ; i <= R ; i++){ int n = num[i] ; find_Left(n) ; find_Left(n-1) ; sum += (LL)(Left[n] - n + 1) ; if(Left[n-1] != Left[n]) Left[n-1] = Left[n] ; } return sum ;}int main(){ int T ; cin>>T ; while(T--){ scanf("%d",&N) ; for(int i = 1 ; i <= N ; i++){ Left[i] = i ; node[i].id = i ; scanf("%d",&node[i].num) ; } sort(node+1 ,node+1+N) ; for(int i = 1 ; i <= N ; i++) num[node[i].id] = i ; /* for(int i = 1 ; i <= N ; i++) printf("%d ",num[i]) ; puts("") ;*/ cout<
<

 

转载于:https://www.cnblogs.com/liyangtianmen/p/3473699.html

你可能感兴趣的文章
ATS项目更新(4) 更新DLL到远程服务器
查看>>
mac 多显示器焦点快速切换
查看>>
第六周学习进度报告
查看>>
nginx发布静态网页
查看>>
Hadoop 面试题之一
查看>>
有关方法重载的实例(例4-10)
查看>>
用数组模拟邻接表
查看>>
**Git中的AutoCRLF与SafeCRLF换行符问题
查看>>
Android布局文件layout.xml的一些属性值
查看>>
三种new
查看>>
多项式与三角函数求导——BUAA OO 第一单元作业总结
查看>>
VsCode 格式化插件配置
查看>>
JAVA 23种开发模式详解(代码举例)
查看>>
Windows上搭建Flume运行环境
查看>>
Linux系统排查4——网络篇
查看>>
文件操作
查看>>
Implement strStr()
查看>>
hough T
查看>>
cannot download, /home/azhukov/go is a GOROOT, not a GOPATH
查看>>
设计模式之简单工厂模式
查看>>