###归并排序 void merge_sort(int l,int r) { if (l == r) { return; } int mid = l + r >> 1; merge_sort(l, mid); merge_sort(mid + 1, r); int i = l, j = mid + ...
分类:
其他好文 时间:
2020-06-10 17:20:34
阅读次数:
48
题目链接:https://ac.nowcoder.com/acm/problem/13947 题目大意:有n个队伍参加三场比赛,如果队伍x有一场比赛赢了队伍y,y也有一场比赛赢了x,就算一组,求有多少组。 思路:这里我用了树状数组求逆序对的方法,先对第一场比赛进行排序,然后求第二场和第三场的逆序对, ...
分类:
编程语言 时间:
2020-06-04 13:32:15
阅读次数:
60
参考博客:https://www.cnblogs.com/chengxiao/p/6194356.html sort不稳定。归并排序是较为稳定的一种排序算法 复杂度:nlogn 本排序的一个应用:HDU 4911 求逆序对数量:http://acm.hdu.edu.cn/showproblem.ph ...
分类:
编程语言 时间:
2020-05-24 19:19:03
阅读次数:
56
面试题51. 数组中的逆序对 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。 示例 1: 输入: [7,5,6,4] 输出: 5 限制: 0 <= 数组长度 <= 50000 归并排序简介: 归并排序(MERGE-SORT ...
分类:
编程语言 时间:
2020-04-24 21:28:34
阅读次数:
78
P1966 火柴排队 求逆序对+数学 题意描述 有 a,b 两个数列,它们的距离为∑(ai bi)2。 每列中相邻的两个数均可进行交换,求至少交换多少次,可以使 a,b 的距离最短。 看不懂你 "这题" 就别做了。 算法分析 首先你应该知道:顺序和≥乱序和≥逆序和(好像没有什么关系) 然后你应该知道 ...
分类:
其他好文 时间:
2020-03-07 21:08:27
阅读次数:
75
题目: 给定一个长度为n的整数数列,请你计算数列中的逆序对的数量。 逆序对的定义如下:对于数列的第 i 个和第 j 个元素,如果满足 i < j 且 a[i] > a[j],则其为一个逆序对;否则不是。 输入格式 第一行包含整数n,表示数列的长度。 第二行包含 n 个整数,表示整个数列。 输出格式 ...
分类:
编程语言 时间:
2020-02-28 20:51:45
阅读次数:
65
给出0~n-1的一个排列,可以整体移动,求逆序对最小值 把数字num[i]的加入,等价于树状数组的第n-num[i]位加1 因为num[i]是第 (n-1)-num[i]+1=n-num[i]大的数字,产生逆序对,只可能在其之前已经插入了数字,此时直接区间查询即可 1 #include <set> ...
分类:
编程语言 时间:
2020-02-10 09:33:02
阅读次数:
50
P1908 逆序对 离散化+树状数组:AC_Code 1 #include <bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 const int maxn=500010; 5 6 int a[maxn],tree[max ...
分类:
编程语言 时间:
2020-02-09 20:09:07
阅读次数:
71
t1 题意,用一个错误算法求逆序对,当前数为p[i]则daan+=max(0,i-p[i]);现在有n个数为1-n的排列,已经给出了前m个数,求有好多种排列方法使得该算法答案正确。 题解。 发现如果当前p[i]<=i则要求前面的所有内容都比他小,否则p[i]>i,则要求比他小的的内容全部在他前面,否 ...
分类:
其他好文 时间:
2020-02-07 01:39:22
阅读次数:
98