• 中南大学第一届长沙地区程序设计邀请赛 New Sorting Algorithm


    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

    3
    3
    3 7 8
    4
    7 1 5 2
    5
    5 4 3 2 1

    Sample Output

    0
    7
    10

    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 <iostream>
    #include <string>
    #include <string.h>
    #include <map>
    #include <stdio.h>
    #include <algorithm>
    #include <queue>
    #include <vector>
    #include <math.h>
    #include <set>
    #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<<gao()<<endl ;
        }
        return 0 ;
    }
  • 相关阅读:
    in_array()和explode()的使用笔记
    写sql语句连接的时候注意的一个小细节
    在thinkphp框架模板中引用session
    查询数据库所有(某个)表中字段名,数据类型,说明等,导出数据字典
    (委托事件处理)关于多线程执行显示进度条的实例(转)&&线程间操作无效: 从不是创建控件“rtxtEntryNO”的线程访问它。
    判断当前线程所处的状态 (转)以及终止当前线程
    string 字符串的分隔处理与list的相互转换
    C# 动态调用webservice
    C#中的List<string>泛型类示例
    命名空间"system.web"中不存在类型或命名空间名称security"
  • 原文地址:https://www.cnblogs.com/liyangtianmen/p/3473699.html
Copyright © 2020-2023  润新知