题目描述 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。 并将P对1000000007取模的结果输出,即输出P%1000000007。 输入描述: 题目保证输入的数组中没有的相同的数字。 数据范围: 对于%50的数据,s ...
分类:
编程语言 时间:
2020-02-24 14:49:35
阅读次数:
71
坚定不移的向前奔跑 才是我应该做的事情吧. 多思考一下 你会发现不一样的世界。 所谓矩阵树定理 用于一张无向图之上求出该图的所有生成树的个数。 在探究其之前我们先再次回顾一番 矩阵的基本定义 和一些比较基本的操作。 矩阵 有行有列 不过有两个定义 行向量 和 列向量 分别指某一行或某一列所形成的向量 ...
分类:
其他好文 时间:
2020-02-20 22:20:49
阅读次数:
86
分析:我们可以逆向考虑(因为正向的话由于第一位的逆序对数一定是0,算不出什么),对于第i个数,它使逆序对的数量增加了temp=num[i]-num[i-1],即区间【1,i-1】内比这个数大的有temp个,即它在i个数中从小到大排在(i-temp)个,那么找到这个数即可。 对于答案序列来讲,他是一个 ...
分类:
编程语言 时间:
2020-02-17 23:51:27
阅读次数:
82
Q:在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007 输入描述: 题目保证输入的数组中没有的相同的数字 数据范围: 对于%50的数据,size d ...
分类:
编程语言 时间:
2020-02-17 20:12:44
阅读次数:
108
一、分治算法 分而治之,即把原问题分割成同等结构的子问题,之后针对子问题逐一解决。 插入排序更关心的是治。 归并排序更关心的是分,如何均匀分的问题。 二、分治算法应用 求逆序数 1. 什么是逆序数? 排在前面的元素比后面大。例如:序列 3 5 6 8 1 ;8排在1前面,但是8 > 1。逆序数反映的 ...
分类:
编程语言 时间:
2020-02-15 21:45:56
阅读次数:
86
K Integers 参考博客:https://blog.csdn.net/Q755100802/article/details/103664555 【题意】 给定一个1到n的排列,可以交换相邻的两个元素。 现在定义一个函数f(x),表示在原排列中,通过交换操作,形成一个1,2,3....x的排列的 ...
分类:
编程语言 时间:
2020-02-10 11:39:21
阅读次数:
67
给出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
"Link" 对于一个交换后的序列$b_i$,其最小交换次数为每个数在原序列的位置构成的排列$p_i$的逆序对数。 那么从小到大枚举每个数,把它删掉,它对答案的贡献就是剩下的数和它形成的逆序对数。 因此我们可以用BIT维护,注意枚举时要把相同的数同时处理。 ...
分类:
其他好文 时间:
2020-02-08 23:19:34
阅读次数:
113