数组中的逆序对
参与人数:2205时间限制:1秒空间限制:32768K
本题知识点: 数组
算法知识视频讲解
题目描述
在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。
没想到这道题能暴力破解。
class Solution {
public:
int Inverse...
分类:
编程语言 时间:
2016-05-12 16:50:44
阅读次数:
196
离线倒着做,每次加入一个节点后新增的逆序对数量就是其左边大于它的数的个数(左边数的总数-左边小于它的数的个数)+右边小于它的数的个数
用树状数组维护求和,对于树状数组中每个节点v所对应的区间线段树维护区间[l,r]中大于v的数的个数。
最后唯一的问题就是指针版线段树MLE……
#include
#include
#include
#include
#include
using na...
分类:
编程语言 时间:
2016-05-12 15:48:33
阅读次数:
234
Minimum Inversion NumberTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 16585 Accepted Submission(s): 10093Problem Description
The inversio...
分类:
其他好文 时间:
2016-05-12 15:06:02
阅读次数:
223
神奇的解法
对于每个节点,建出权值线段树
每次查询右子树的权值线段树和左子树的权值线段树,左子树中比右子树小的有多少?右子树比左子树小的有多少?(分别对应不交换的逆序对和交换的逆序对)
将左子树和右子树的权值线段树合并
递归进行这个操作
感觉复杂度很不靠谱,于是想证明一下复杂度
最开始权值线段树共O(nlogn)个节点,最后共O(n)个节点
每次合并两棵树的每个节点都要访问一遍,所以...
分类:
其他好文 时间:
2016-05-12 12:21:09
阅读次数:
218
题目:在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。 思路:看网上一些基于归并排序的解法,看的我很懵,其实这个答案就是1~数组中后一个数小于前一个数的个数的和。能找规律用公式的绝不用算法。 实现代码: ...
分类:
编程语言 时间:
2016-05-08 11:44:05
阅读次数:
118
题目链接: C. Mashmokh and Reverse Operation time limit per test 4 seconds memory limit per test 512 megabytes input standard input output standard output ...
分类:
编程语言 时间:
2016-05-06 23:33:25
阅读次数:
602
乱搞,处理出这三样东西,[1,i]所包含的逆序对数cnt[i],区间[1,i]对于区间[j*sqrt(n),(j+1)*sqrt(n)]的逆序对数sum[j][i],以及倒序将每个元素插入主席树,那么询问[l,r]的答案就为[1,r]的逆序对数减去[1,l-1]的逆序对数减去(A,B)(A∈[1,l ...
分类:
其他好文 时间:
2016-05-05 02:04:22
阅读次数:
170
2431: [HAOI2009]逆序对数列 Description 对于一个数列{ai},如果有i<j且ai>aj,那么我们称ai与aj为一对逆序对数。若对于任意一个由1~n自然数组成的数列,可以很容易求出有多少个逆序对数。那么逆序对数为k的这样自然数数列到底有多少个? 对于一个数列{ai},如果有 ...
分类:
其他好文 时间:
2016-05-02 16:54:30
阅读次数:
139
重新复制的数组应该在每次合并后都更新,剑指offer好像没有做。 ...
分类:
编程语言 时间:
2016-04-13 13:16:17
阅读次数:
217