• 九度oj题目1348:数组中的逆序对


    题目1348:数组中的逆序对

    时间限制:1 秒

    内存限制:32 兆

    特殊判题:

    提交:2572

    解决:606

    题目描述:
    在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。
    输入:
    每个测试案例包括两行:
    第一行包含一个整数n,表示数组中的元素个数。其中1 <= n <= 10^5。
    第二行包含n个整数,每个数组均为int类型。
    输出:
    对应每个测试案例,输出一个整数,表示数组中的逆序对的总数。
    样例输入:
    4
    7 5 6 4
    样例输出:
    5

    注意:数据的表示范围!!long long!!

     1 #include <cstdio>
     2 #include <cstring>
     3 #include <string>
     4 #include <queue>
     5 #include <stack>
     6 #include <iostream>
     7 using namespace std;
     8 int a[100005],b[100005];
     9 long long num;
    10 void merge(int s,int mid,int e){
    11     int p=s,q=mid+1,k=s;
    12     while(p<=mid&&q<=e){
    13         if(a[p]>a[q]){
    14             num+=mid-p+1;//attention
    15 
    16             //cout<<"p: "<<p<<" q: "<<q<<"  "<<num<<endl;
    17 
    18             b[k++]=a[q++];
    19         }
    20         else{
    21             b[k++]=a[p++];
    22         }
    23     }
    24 
    25     //cout<<mid<<endl;
    26 
    27     if(p>mid){
    28         while(k<=e){
    29             b[k++]=a[q++];
    30         }
    31     }
    32     else{
    33         while(k<=e){
    34             b[k++]=a[p++];
    35         }
    36     }
    37     int i;
    38     for(i=s;i<=e;i++){
    39         a[i]=b[i];
    40     }
    41 }
    42 void mergesort(int s,int e){
    43     if(s>=e)
    44         return;//attention!!
    45     int mid=(s+e)/2;
    46 
    47     //cout<<mid<<endl;
    48 
    49     mergesort(s,mid);
    50 
    51     //cout<<mid<<endl;
    52 
    53     mergesort(mid+1,e);
    54     merge(s,mid,e);
    55 }
    56 int main(){
    57     //freopen("D:\INPUT.txt","r",stdin);
    58     int n;
    59     while(scanf("%d",&n)!=EOF){
    60         int i=0;
    61         for(;i<n;i++){
    62             scanf("%d",&a[i]);
    63             //cout<<a[i]<<endl;
    64         }
    65         num=0;
    66 
    67         //cout<<n<<endl;
    68 
    69         mergesort(0,n-1);
    70         printf("%lld
    ",num);
    71     }
    72     return 0;
    73 }
  • 相关阅读:
    【转】DirectoryEntry.Properties属性的遍历
    mysql 插入优化
    MySQL错误无法启动1067
    用ADO.NET的ExecuteScalar方法返回单一值资讯动态
    poj 1416 Shredding Company
    poj 1724 ROADS
    poj 3411 Paid Roads
    poj 1129 Channel Allocation
    poj 2676 Sudoku
    spring里的applicationlisener
  • 原文地址:https://www.cnblogs.com/Deribs4/p/4647947.html
Copyright © 2020-2023  润新知