11.02A

Posted ullio

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了11.02A相关的知识,希望对你有一定的参考价值。

题目描述

有 n 个整数,a1 一直到 an,按照下标从 1 到 n 排列到一行。接下来 m 个操作,每次选取下
标 x,并将下标大于等于 x 且不比 a[x]大的数字取出来,按照从小到大排序,之后放回所取
下标的位置。你要计算出初始的逆序对数以及每次操作后的逆序对数。  
比如有 5 个数字,2 3 4 5 1,我们选下标 1,那么把下标 1 之后且不小于 2 的取出来,变成
成了 _ 3 4 5 _,把 2 1 排序变成 1 2,放回去变成 1 3 4 5 2。  

输入输出格式

输入格式

第一行包含三个整数 n,m,表示数个数和操作的次数。
接下来 n 个数字,a1,a2……an,ai 可能相同,分别表示编号 1,2……n。最
后 m 行,每行一个数字,表示要选取的下标。

输出格式

输出 m+1 的整数,分别是一开始的逆序对数,进行了 i 次操作后的逆序对数。

数据范围

0<=ai<=1e6
对于 40%的数据,1 <= n <= 20,1 <= m <= 20。
对于 70%的数据,1 <= n,m <= 10^3。
对于 100%的数据,1 <= n,m <= 10^5

样例

样例一输入:

3 2
2 3 1
1
1

样例一输出:

2
1
1  
初始的逆序对数为 2,当选中第一个数的时候,后面小于 2 的数只有 1,排序后变成 1,2,
然后放回那些取的位置,变为 1 3 2,逆序对数变成了 1。再次选中第一个数,后面没有小
于 1 的数,所以都不会动,逆序对数不变。

思路

1.40%数据

暴力换,暴力算
期望时间复杂度 $ Theta left( m n^{2} ight) $

2.70%数据

暴力换,归并算
期望时间复杂度 $ Theta left( mn log n ight) $

3.100%数据

显然,选出的数字对逆序对的贡献会变为0
那么维护每个数字对答案的贡献,是否选择过
再预处理一下区间最小值
二分答案找下一个小于等于选择数字的位置即可
期望时间复杂度 $ Theta left( n log n ight) $

以上是关于11.02A的主要内容,如果未能解决你的问题,请参考以下文章

11.02B

VSCode自定义代码片段——CSS选择器

VSCode自定义代码片段——.vue文件的模板

Android代码片段

Android 实用代码片段

Android 实用代码片段