思路:
分治法 归并排序的过程中,有一步是从左右两个数组中,每次都取出小的那个元素放到tmp[]数组中
右边的数组其实就是原数组中位于右侧的元素。当不取左侧的元素而取右侧的元素时,说明左侧剩下的元素均比右侧的第一个元素大,即均能构成一个逆序对。假设现在左侧剩余n个元素,则逆序对数+n。
另外,如果当所有右侧的元素都取完,但是左侧仍然有元素剩余时,左侧剩余的元素已经在之前的运算中加到了逆序对中...
分类:
其他好文 时间:
2015-04-02 22:37:16
阅读次数:
223
http://hihocoder.com/contest/hiho39/problemsjava.util.*;
Main{
=;
mergSort(List<Long>a,l,r){
mid;
(l<r){
mid=(l+r)/;
(a,l,mid);
(a,mid+,r);
List<Long>b1,b2;
b1=ArrayList<Long>(a.subList(l,mid+));
b2=ArrayList<Long>(a.subList(mid..
分类:
编程语言 时间:
2015-04-02 16:39:09
阅读次数:
160
最近申请了微软的暑假实习,4号就要在线笔试了,在线测试系统用的是http://hihocoder.com/,今天试手做了一道题。
【题目】
原题链接:http://hihocoder.com/contest/hiho39/problem/1
输入
第1行:1个整数N,表示数组长度。
第2行:N个整数,表示数组的元素a[i],1≤a[i]≤2^31-1。
输出
第1行...
分类:
编程语言 时间:
2015-04-02 01:21:08
阅读次数:
169
题意查询给定[L, R]区间内 逆序对数 ==k的子区间的个数。我们只需要求出 子区间小于等于k的个数和小于等于k-1的个数,然后相减就得出答案了。对于i(1≤i≤n),我们计算ri表示[i,ri]的逆序对数小于等于K,且ri的值最大。(ri对应代码中的cnt数组)显然ri单调不降,我们可以通过用两...
分类:
编程语言 时间:
2015-04-01 19:20:28
阅读次数:
234
题意:k行n列,求出每一列的逆序对,输出逆序对最少的所在的行数。
思路:采用归并排序或者树状数组,这两天写了好几道了,要练熟悉!...
分类:
编程语言 时间:
2015-04-01 13:21:53
阅读次数:
135
题意:求n个数的逆序对数,可以交换k次相邻的,所以求出原序列的逆序对后减去k即可。
思路:求逆序对有两种方法,归并排序和树状数组。逆序对的几种求法...
分类:
编程语言 时间:
2015-04-01 09:42:24
阅读次数:
296