在一个排列中,如果一对数的前后位置与大小顺序相反,即前面的数大于后面的数,那么它们就称为一个逆序。一个排列中逆序的总数就称为这个排列的逆序数。

 
如2 4 3 1中,2 1,4 3,4 1,3 1是逆序,逆序数是4。给出一个整数序列,求该序列的逆序数。
Input
第1行:N,N为序列的长度(n <= 50000)
第2 - N + 1行:序列中的元素(0 <= A[i] <= 10^9)
Output
输出逆序数
Input示例
4
2
4
3
1
Output示例
4

思路:
  本题的题意较为简单,起初一组数中的逆序对的数量。其中的关键是对离散化的理解。离散化在这个过程中感觉更像是在记录了原来的先后顺序的情况下按照数值大小再次排序,这样在判断逆序对的时候可以以n的复杂度顺序判断,而不需要n^2判断。 AC代码:
#include <stdio.h>
#include <algorithm>
#include <iostream>
using namespace std;
const int maxn=;
int n; int hash[maxn]; struct Node{
int s,v;
}node[maxn]; int tree[maxn]; bool cmp(Node a,Node b){
return a.v<b.v;
} int lowbit(int i){
return i&(-i);
} void add(int x,int v){
for(int i=x;i<=n;i+=lowbit(i)){
tree[i]+=v;
}
} int getsum(int i){
int s=;
while(i>){
s+=tree[i];
i-=lowbit(i);
}
return s;
} int main(){
scanf("%d",&n);
for(int i=;i<=n;i++){
scanf("%d",&node[i].v);
node[i].s=i;
} //离散化 ,hash[i]里存的是v的值为i的node在全部node中以v排序后的排名 (由小到大)
sort(node+,node++n,cmp);
for(int i=;i<=n;i++){
hash[node[i].s]=i;
}
int res=;
for(int i=;i<=n;i++){
add(hash[i],);
res+=i-getsum(hash[i]);
} cout<<res; return ;
}

51nod 1019 逆序数(逆序数+离散化)的更多相关文章

  1. 51nod 1019 逆序数

    在一个排列中,如果一对数的前后位置与大小顺序相反,即前面的数大于后面的数,那么它们就称为一个逆序.一个排列中逆序的总数就称为这个排列的逆序数. 如2 4 3 1中,2 1,4 3,4 1,3 1是逆序 ...

  2. 51Nod 1019 逆序数(线段树)

    题目链接:逆序数 模板题. #include <bits/stdc++.h> using namespace std; #define rep(i, a, b) for (int i(a) ...

  3. (分治)51NOD 1019 逆序数

    在一个排列中,如果一对数的前后位置与大小顺序相反,即前面的数大于后面的数,那么它们就称为一个逆序.一个排列中逆序的总数就称为这个排列的逆序数.   如2 4 3 1中,2 1,4 3,4 1,3 1是 ...

  4. 51Nod 1019 逆序数 (归并排序)

    #include <iostream> #include <cstring> using namespace std; ; int a[maxn]; int res[maxn] ...

  5. 1019.Line Painting(线段树 离散化)

    1019 离散化都忘记怎么写了 注意两个端点 离散化后用线段树更新区间 混色为-1  黑为2  白为1  因为N不大 最后直接循环标记这一段的颜色查找 #include <iostream> ...

  6. 51nod 1206 && hdu 1828 Picture (扫描线+离散化+线段树 矩阵周长并)

    1206 Picture  题目来源: IOI 1998 基准时间限制:2 秒 空间限制:131072 KB 分值: 160 难度:6级算法题  收藏  关注 给出平面上的N个矩形(矩形的边平行于X轴 ...

  7. PHP 数字序数&字母序数 相互转化

    序数从1开始  即 A=1  而非 A=0 /** * 数字序列转字母序列 * @param $int * @param int $start * @return string|bool */ fun ...

  8. HDU 1394 Minimum Inversion Number(最小逆序数 线段树)

    Minimum Inversion Number [题目链接]Minimum Inversion Number [题目类型]最小逆序数 线段树 &题意: 求一个数列经过n次变换得到的数列其中的 ...

  9. SPOJ:Another Version of Inversion(二维数组的逆序对)

    DCE Coders admins are way much geekier than they actually seem! Kartik has been following that tradi ...

随机推荐

  1. Query performance optimization of Vertica

    Don't fetch any data that you don't need,or don't fetch any columns that you don't need. Because ret ...

  2. PD虚拟机修改RemixOS的屏幕分辨率

    PD虚拟机修改RemixOS的屏幕分辨率 2017年12月02日02:13:55 by SemiconductorKING 最近要用个移动端APP,手机不方便就想在电脑跑一个,然后装了个以前用过的觉得 ...

  3. Linux学习笔记之(1)~Linux有趣的历史概览

    献给知道mono,了解Jexus,对.net混搭技术感兴趣的朋友. 1965年,Bell.MIT和GE公司发起Multics计划,目标是实现一个操作系统可以让大型主机实现连接三百个终端的目标.(那个时 ...

  4. 初步理解require.js模块化编程

    初步理解require.js模块化编程 一.Javascript模块化编程 目前,通行的Javascript模块规范共有两种:CommonJS和AMD. 1.commonjs 2009年,美国程序员R ...

  5. MyBatis_注解式开发

    一.注解式开发 mybatis的注解主要替换映射文件. 二.基础语法 注解首字母大写,因为注解与类.接口是同一级别的(类同一层级的:类,接口,注解,枚举).一个注解,后台对应着一个@interface ...

  6. 洛谷11月月赛题解(A-C)

    心路历程 辣鸡T3卡我1.5h题意,要不是最后nlh跟我解释了一下大样例估计这次是真凉透了.. A P4994 终于结束的起点 打出暴力来发现跑的过最大数据?? 保险起见还是去oeis了一波,然后被告 ...

  7. font-size 基准

    浏览器的缺省字体为16px: 你可以先将基准字体大小设置为10px; body  { font-size: 62.5%; } 然后统一使用 em作为单位 div { font-size: 2.4em; ...

  8. base64的编码解码的一些坑

    1. //编码 value = base64encode(utf16to8(src)) //解码 value = utf8to16(base64decode(src)) 这里:base64编码之前先转 ...

  9. 关于Function原型对象和Object原型对象的一些疑惑

    网上有一道美团外卖的面试题是这样的: Function.prototype.a = 'a'; Object.prototype.b = 'b'; function Person(){}; var p ...

  10. C# textBox限定输入数字

    private void tBox_KeyPress(object sender, KeyPressEventArgs e) { ; //禁止空格键 )) return; //处理负数 if (e.K ...