zoukankan      html  css  js  c++  java
  • HDU 2689 sort it

    Problem Description
    You want to processe a sequence of n distinct integers by swapping two adjacent sequence elements until the sequence is sorted in ascending order. Then how many times it need.
    For example, 1 2 3 5 4, we only need one operation : swap 5 and 4.
     


    Input
    The input consists of a number of test cases. Each case consists of two lines: the first line contains a positive integer n (n <= 1000); the next line contains a permutation of the n integers from 1 to n.
     


    Output
    For each case, output the minimum times need to sort it in ascending order on a single line.
     


    Sample Input
    3 1 2 3 4 4 3 2 1
     


    Sample Output
    0 6
    题目大意:给你一个数n ,然后有1 ~ n 的一个排列,让你找出这个排列的逆序数。
    解题思路:此题可以用树状数组来解,树状数组的三个用途:1.单点更新,区间求和 2、区间更新,单点求和
    3、求逆序数。求逆序数想法较简单,请看代码:
    #include<iostream>
    #include<cstring>
    #include<string>
    #include<cstdio>
    #include<cmath>
    #include<algorithm>
    #include<queue>
    using namespace std ;
    const int MAXN = 1e5 + 7 ;
    int C[MAXN] ;
    int n ;
    int lowbit(int x)
    {
        return x & -x ;
    }
    int sum(int x)
    {
        int sumt = 0 ;
        while (x > 0)
        {
            sumt += C[x] ;
            x -= lowbit(x) ;
        }
        return sumt ;
    }
    void add(int x , int d)
    {
        while (x <= n)
        {
            C[x] += d ;
            x += lowbit(x) ;
        }
    }
    int main()
    {
        while (scanf("%d" , &n) != EOF)
        {
            int i ;
            int ans = 0 ;
            memset(C , 0 ,sizeof(C)) ;
            for(i = 1 ; i <= n ; i ++)
            {
                int a ;
                scanf("%d" , &a) ;
                add(a , 1) ;  // 此处是整个程序的精华部分,请好好理解
                ans += i - sum(a) ;  // 统计逆序数
            }
            printf("%d
    " , ans) ;
        }
        return 0 ;
    }
    


  • 相关阅读:
    TOMCAT原理详解及请求过程
    详解Tomcat配置及使用
    Android网络编程(三)Volley使用方法全解析
    Android开发文档翻译之-Services
    竞赛中经常使用的C++写法
    Android消息机制
    boost的内存管理
    二叉树遍历技巧
    【 D3.js 视频系列 】 飞速入门
    [Spring实战系列](19)Servlet不同版本号之间的差别
  • 原文地址:https://www.cnblogs.com/dyllove98/p/3220057.html
Copyright © 2011-2022 走看看