O(nlogn)求逆序数对的个数
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<cmath>
using namespace std;
const int maxn=1e5+5;
int is1[maxn],is2[maxn];// is1为原数组,is2为临时数组,n为个人定义的长度
long long merge(int low,int mid,int high)
{
    int i=low,j=mid+1,k=low;
    long long count=0;
    while(i<=mid&&j<=high)
        if(is1[i]<=is1[j])// 此处为稳定排序的关键,不能用小于
            is2[k++]=is1[i++];
        else
        {
            is2[k++]=is1[j++];
            count+=j-k;// 每当后段的数组元素提前时,记录提前的距离
        }
    while(i<=mid)
        is2[k++]=is1[i++];
    while(j<=high)
        is2[k++]=is1[j++];
    for(i=low;i<=high;i++)// 写回原数组
        is1[i]=is2[i];
    return count;
}
long long mergeSort(int a,int b)// 下标,例如数组int is[5],全部排序的调用为mergeSort(0,4)
{
    if(a<b)
    {
        int mid=(a+b)/2;
        long long count=0;
        count+=mergeSort(a,mid);
        count+=mergeSort(mid+1,b);
        count+=merge(a,mid,b);
        return count;
    }
    return 0;
}
int main()
{
    int n,x,y;
    while(~scanf("%d%d%d",&n,&x,&y))
    {
        int tmp=min(x,y);
        for(int i=1;i<=n;i++)
            scanf("%d",&is1[i]);
        printf("%lld\n",tmp*mergeSort(1,n));
    }
    return 0;
}												
											O(nlogn)求逆序数对的个数的更多相关文章
- CF 61E  树状数组+离散化 求逆序数加强版 三个数逆序
		
http://codeforces.com/problemset/problem/61/E 题意是求 i<j<k && a[i]>a[j]>a[k] 的对数 会 ...
 - HDU3465--Life is a Line(树状数组求逆序数,离散化)
		
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others) Total Submission(s ...
 - [CF 351B]Jeff and Furik[归并排序求逆序数]
		
题意: 两人游戏, J先走. 给出一个1~n的排列, J选择一对相邻数[题意!!~囧], 交换. F接着走, 扔一硬币, 若正面朝上, 随机选择一对降序排列的相邻数, 交换. 若反面朝上, 随机选择一 ...
 - POJ训练计划2299_Ultra-QuickSort(归并排序求逆序数)
		
Ultra-QuickSort Time Limit: 7000MS Memory Limit: 65536K Total Submissions: 39279 Accepted: 14163 ...
 - hiho一下 第三十九周 归并排序求逆序数
		
题目链接:http://hihocoder.com/contest/hiho39/problem/1 ,归并排序求逆序数. 其实这道题也是可以用树状数组来做的,不过数据都比较大,所以要离散化预处理一下 ...
 - nyoj117  求逆序数
		
求逆序数 时间限制:2000 ms | 内存限制:65535 KB 难度:5 描述 在一个排列中,如果一对数的前后位置与大小顺序相反,即前面的数大于后面的数,那么它们就称为一个逆序.一个排列中 ...
 - poj 2299 Ultra-QuickSort  (归并排序 求逆序数)
		
题目:http://poj.org/problem?id=2299 这个题目实际就是求逆序数,注意 long long 上白书上的模板 #include <iostream> #inclu ...
 - POJ2299  Ultra-QuickSort(归并排序求逆序数)
		
归并排序求逆序数 Time Limit:7000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Descri ...
 - 线段树求逆序数方法 HDU1394&&POJ2299
		
为什么线段树能够求逆序数? 给一个简单的序列 9 5 3 他的逆序数是3 首先要求一个逆序数有两种方式:能够从头開始往后找比当前元素小的值,也能够从后往前找比当前元素大的值,有几个逆序数就是几. 线段 ...
 
随机推荐
- android RefBase、sp、wp
			
首先RefBase在android的c++部分是作为一个所有类的基类,其作用跟Java中的Object类似 这个类中存在一个私有成员: weakref_impl* const mRefs;(weakr ...
 - Python对象拷贝——深拷贝与浅拷贝
			
对象赋值 浅拷贝 深拷贝 1. 对象赋值 对象的赋值实际上是对对象的引用.也就是说当把一个对象赋值给另一个对象时,只是拷贝了引用.如: >>> t1 = tuple('furzoom ...
 - CSS3学习笔记(2)—左右跳动的红心
			
还在为无法表达内心澎湃的心情而着急吗?还在为制作跳动的心而烦恼吗?哈哈,今天我就把代码全部奉上,为你们追妹子添点贡献,下面来看最终的动态效果(事先说明一下:我用的截屏gif制作软件是绿色版的,所以gi ...
 - Gym - 100187J J - Deck Shuffling —— dfs
			
题目链接:http://codeforces.com/gym/100187/problem/J 题目链接:问通过洗牌器,能否将编号为x的牌子转移到第一个位置? 根据 洗牌器,我们可以知道原本在第i位置 ...
 - elasticsearch function_score Query——文档排序结果的最后一道墙
			
function_score Query The function_score query is the ultimate tool for taking control of the scoring ...
 - wiki中文语料+word2vec (python3.5  windows win7)
			
环境: win7+python3.5 1. 下载wiki中文分词语料 使用迅雷下载会快不少,大小为1个多G https://dumps.wikimedia.org/zhwiki/late ...
 - [转载] Android raw与assets区别
			
*res/raw和assets的相同点: 1.两者目录下的文件在打包后会原封不动的保存在apk包中,不会被编译成二进制. *res/raw和assets的不同点:1.res/raw中的文件会被映射到R ...
 - Chapter2——如何分析Android程序
			
前几天买了<Android软件安全与逆向分析>这本书,决定在这里记一些笔记. 第一章介绍了如何搭建环境,此处略去:第二章开始讲分析Android程序. 下面按顺序记录关键内容. ----- ...
 - bootstrap学习大纲
			
bootstrap 学习分三部分,分别是 css样式,css组件,js插件. 下面介绍三部分分别要学习的内容: 1.css样式:栅格系统,排版,代码,表格,表单,按钮,图片,辅助类,响应式工具. 2. ...
 - Oracle中的关键字
			
NVL和COALESCE的区别: nvl(COMMISSION_PCT,0)如果第一个参数为null,则返回第二个参数如果第一个参数为非null,则返回第一个参数 COALESCE(EXPR1,EXP ...