逆序数的求法-csdn博客

首先介绍一下逆序数。对于一个序列,它的逆序数就是指这个序列的其中两个数前后位置和大小顺序相反。例如序列14532,其中5、 3是一对逆序数,5、 2也是一对逆序数。等等
解法

1. n^2复杂度的暴力
直接暴力枚举即可

```c++
int s[inf],sum=0;
for(int i=0;i<n;i++)for(int j=i+1;j<n;j++)if(s[i]>s[j])sum++;
```

2. 树状数组( nlog(n) )
树状数组是先确定每个值在所有序有序情况下的序列中所在的位置(离散化)。
列如序列:5 1 4 3 。
离散化后的值为:4 1 3 2。
从最左端开始建立树状数组,每创建一个就执行一次 i - query( x ) (x 为离散化的 值) 类加到ans上。最后的 ans即为所求的答案。
离散化的实质就是把所有的数都变成从1到n-1的连续的数。
思想实质:其实就是没针对当下一个序列最后的位置n,维护一个树状数组,这个数组记录值值的个数,然后求出这个序列最后一个数的前面有几个数和这个数组成逆序数,然后一次递推。由于可能每个数出现的次数可能不止一次,或者不连续,此时用离散化预处一下。( 初学者可以从连续的无重复的序列理清一下思路 )

#include <iostream>
#include <algorithm>
using namespace std;
const int inf = 1e5;
struct node
{
int val,i;
bool operator<(node x)const {return val<x.val;
}
}sn[inf];
int tree[inf],b[inf],n;
void add(int i,int x)
{
while(i<=n){tree[i]+=x;i+=i&-i;
}
}
int query(int i)
{
int sum=0;
while(i>=1)
{   sum+=tree[i];i-=i&-i;
}
return sum;
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{cin>>sn[i].val;sn[i].i=i;
}
sort(sn+1,sn+n+1);
int cnt=1;
for(int i=1;i<=n;i++)
{   if(i>1&&sn[i].val>sn[i-1].val)cnt++;b[sn[i].i]=cnt;
}
int ans=0;
for(int i=1;i<=n;i++)
{add(b[i],1);ans+=i-query(b[i]);
}
cout<<ans<<endl;
return 0;
}

3. 归并排序法( nlog(n) )
这种方法是利用了归并排序的过程,在排序中进行计数。

#include<iostream>
#define endl '\n'
using namespace std;
const int inf = 1e5;
int sn[inf],sum;
int temp[inf];
void Merge_sqrt(int l,int m,int r)
{int  h=l,g=m+1,f=l;while(h<=m&&g<=r){if(sn[h]<=sn[g]){temp[f++]=sn[h++];}else{temp[f++]=sn[g++];sum+=m+1-h;}}while(h<=m){temp[f++]=sn[h++];}while(g<=r)temp[f++]=sn[g++];for(int i=l;i<=r;i++)sn[i]=temp[i];
}
void Merge(int l,int r)
{if(l<r){int mid=(l+r)>>1;Merge(l,mid);Merge(mid+1,r);//cout<<l<<" "<<mid<<" "<<r<<endl;Merge_sqrt(l,mid,r);//cout<<sum<<endl;}
}int main()
{int n;cin>>n;for(int i=0;i<n;i++)cin>>sn[i];Merge(0,n-1);cout<<sum<<endl;return 0;
}欢迎大家的观看哈O(∩_∩)O哈哈~,如果有喜欢的可以关注一下^_^

posted @ 2018-08-16 16:22 i-Curve 阅读(...) 评论(...) 编辑 收藏

逆序数的求法-csdn博客相关推荐

  1. taoqick 搜索自己CSDN博客

    L1 L2正则化和优化器的weight_decay参数 kaiming初始化的推导 Pytorch动态计算图 Pytorch自动微分机制 PyTorch中在反向传播前为什么要手动将梯度清零? 通俗讲解 ...

  2. template标签_Django实战: 利用自定义模板标签实现仿CSDN博客月度归档

    应网友慕之岩的请求,现提供下Django项目中如何使用自定义标签实现仿CSDN博客的月度归档(如下图所示).要求按月统计每个月发表的博文篇数, 跳过空白月份,最后结果按发布时间逆序排列.点击每个月份可 ...

  3. CSDN博客 论坛——读好书,畅想 我的IT成长路 活动【已完成】

    不论你是刚刚进入IT行业的学子,还是涉猎广泛的技术骨干,或是肩负极富挑战工作的大牛.CIO,我们都有自己的成长故事和前进方向. 在近期开发者参与的CSDN调查活动中,37.89%的开发者表示自己会一直 ...

  4. CSDN博客论坛——读好书,畅想“我的IT成长路”活动【已完成】

    不论你是刚刚进入IT行业的学子,还是涉猎广泛的技术骨干,或是肩负极富挑战工作的大牛.CIO,我们都有自己的成长故事和前进方向. 在近期开发者参与的CSDN调查活动中,37.89%的开发者表示自己会一直 ...

  5. CSDN博客运营团队2022年H2总结

    前言 在2022年的年中,我们对外公布了我们的年中盘点:2022年上半年部分团队的总结 我们希望尽可能的公开我们的工作内容,让更多人可以了解CSDN的变化,同时也希望收到大家的真实反馈:你期待的新功能 ...

  6. 康托展开详解 -csdn博客

    康托展开详解 -csdn博客 定义: 康托展开是一个全排列到一个自然数的双射,常用于构建哈希表时的空间压缩. 康托展开的实质是计算当前排列在所有由小到大全排列中的名次,因此是可逆的. 原理介绍 **X ...

  7. 关于博客园与CSDN博客同步的说明

    把博客园与CSDN比较,我认为博客园有技术内容优势,CSDN有行业资源优势,两者都比较重要.因此在两家网站同步发布博客. CSDN博客地址:http://blog.csdn.net/caoshiyin ...

  8. 2019年度CSDN博客之星TOP10榜单揭晓,你上榜了吗?

    培根说,『读书造成充实的人,会议造成未能觉悟的人,写作造成正确的人』. 在短信短视频快速迭代的快时代,更深度的思考.更正确的实践,更成体系的写作与分享,尤显可贵.这里,每一篇博文都是开发者实战的经验解 ...

  9. CSDN博客的创建及使用

    文章目录 一.创建CSDN博客详细流程 1. 注册 2. 绑定手机 二.编辑和发布博客 1. 设置markdown格式 2. 发布文章 3. 常见的markdown语法 3.1 分级标题 3.2 目录 ...

最新文章

  1. 20 种小技巧,玩转 Google Colab
  2. linux下各种颜色的文件表示的文件类型
  3. (转)自动化管理工具Saltstack之nginx部署
  4. 手机号 imsi tmsi_抓取网站访客手机号
  5. 进程间通信(一)管道
  6. 看清条款,小心网通陷阱
  7. 视不可当:信息图与可视化传播
  8. python背景图颜色_python – 使图形透明与彩色背景
  9. 万字长文讲解编码知识,看这文就够了!| 原力计划
  10. 设计模式之责任链模式(Chain of Responsibility )
  11. 【转】设计模式六大原则(1):单一职责原则
  12. dedecms手机站和PC站共用同一数据库的方法
  13. 《炬丰科技-半导体工艺》 光学镜片和玻璃部件的超声波清洗
  14. HP UNIX下载工具的一个好地方
  15. 计算机网络(一):网络层次划分及各层的网络协议
  16. 可以看计算机专业书籍的app,分享两个好用的读书APP
  17. 暴风电视刷鸿蒙,暴风电视蓝屏怎么解决
  18. vs2010调试c语言找不到exe文件夹,vs上调试和直接运行exe不同
  19. 前端-js网页特效(一)倒计时效果及原理
  20. 有关“iusb3mon.exe已停止工作”的解决方法与我解决这个问题的坑爹经历。

热门文章

  1. 【Unity2D好项目分享】用全是好活制作横版卷轴射击游戏①简单制作滚动卷轴以及玩家移动
  2. Java(Android)设计模式-简介
  3. 径向基函数(rbf)神经网络 基础篇 奥利给 干就完了!
  4. STL案例--员工分组
  5. ELK保姆级安装部署教程
  6. list 分批_java8 Stream 大数据量List分批处理切割
  7. 【图论】C_hdu 2066 一个人的旅行(多源最短路)
  8. t35-11轴流式通风机参数一览
  9. 万象奥科嵌入式核心板解决方案
  10. 课堂派批量下载PDF