P3157 [CQOI2011]动态逆序对 题目描述 对于序列\(A\),它的逆序对数定义为满足\(i<j\),且\(A_i>A_j\)的数对\((i,j)\)的个数.给\(1\)到\(n\)的一个排列,按照某种顺序依次删除\(m\)个元素,你的任务是在每次删除一个元素之前统计整个序列的逆序对数. 输入输出格式 输入格式: 输入第一行包含两个整数\(n\)和\(m\),即初始元素的个数和删除的元素个数.以下\(n\)行每行包含一个\(1\)到\(n\)之间的正整数,即初始排列.以下\(m\)行…
题面 luogu 题解 树套树(树状数组套动态开点线段树) 静态使用树状数组求逆序对就不多说了 用线段树代替树状数组,外面套树状数组统计每个点逆序对数量 设 \(t1[i]\)为\(i\)前面有多少个数比\(a[i]\)大 \(t2[i]\)为\(i\)后面有多少个数比\(a[i]\)小 那么当删除\(a[i]\)时 \(ans\) \(=\) \(ans-(t1[i]+t2[i])+\)\(i\)前面有多少个数比\(a[i]\)大且已经被删了+\(i\)后面有多少个数比\(a[i]\)小且已经…
题目:https://www.luogu.org/problemnew/show/3157 题解: 1.对于静态的逆序对可以用树状数组做 2.我们为了方便可以把删除当成增加,可以化动为静 3.找到三维:时间,位置,大小 然后CDQ分治 #include<cstdio> #include<algorithm> #include<cstring> #define N 200010 typedef long long ll; using namespace std; ll n…
题目大意: 给定\(1\)到\(n\)的一个排列,按照给定顺序依次删除\(m\)个元素,计算每个元素删除之前整个序列的逆序对数量 基本套路:删边变加边 那么我们不就是求满足\(pos_i<pos_j,tim_i<tim_j,num_i>num_j\)的数量嘛 先按\(tim\)排序,然后归并\(pos_i\),树状数组\(num_i\) 不过这道题我们需要正反跑两个\(cdq\),因为我们需要分开统计\(pos_i<pos_j,num_i>num_j\)和\(pos_i>…
题目:bzoj3295 https://www.lydsy.com/JudgeOnline/problem.php?id=3295 洛谷 P3157(同一道题) https://www.luogu.org/problemnew/show/P3157 洛谷 P1393(略有不同) https://www.luogu.org/problemnew/show/P1393 动态逆序对问题: 树状数组套权值线段树,动态开点: 就像树状数组那样做就可以了,每个线段树维护一段区间内的不同权值的数的个数: 删除…
[BZOJ3295]动态逆序对(线段树,树状数组) 题面 Description 对于序列A,它的逆序对数定义为满足iAj的数对(i,j)的个数.给1到n的一个排列,按照某种顺序依次删除m个元素,你的任务是在每次删除一个元素之前统计整个序列的逆序对数. Input 输入第一行包含两个整数n和m,即初始元素的个数和删除的元素个数.以下n行每行包含一个1到n之间的正整数,即初始排列.以下m行每行一个正整数,依次为每次删除的元素. Output 输出包含m行,依次为删除每个元素之前,逆序对的个数. S…
P3157 [CQOI2011]动态逆序对 树状数组套线段树 静态逆序对咋做?树状数组(别管归并QWQ) 然鹅动态的咋做? 我们考虑每次删除一个元素. 减去的就是与这个元素有关的逆序对数,介个可以预处理:从左到右求一次,再倒过来求一次,用2个数组存起来. 但是前面已经删除的元素与当前删除元素组成的逆序对会被重复计数. 于是考虑再减去重复计数 我们用树状数组套线段树(动态开点): 第$i$棵线段树 储存 每个位置在$i$之前的被删除元素 蓝后每次查询时左边右边找一找 把它们加回来就好辣 #incl…
P3157 [CQOI2011]动态逆序对 https://www.luogu.org/problemnew/show/P3157 题目描述 对于序列A,它的逆序对数定义为满足i<j,且Ai>Aj的数对(i,j)的个数.给1到n的一个排列,按照某种顺序依次删除m个元素,你的任务是在每次删除一个元素之前统计整个序列的逆序对数. 输入输出格式 输入格式: 输入第一行包含两个整数n和m,即初始元素的个数和删除的元素个数.以下n行每行包含一个1到n之间的正整数,即初始排列.以下m行每行一个正整数,依次…
P3157 [CQOI2011]动态逆序对 题目描述 对于序列A,它的逆序对数定义为满足i<j,且Ai>Aj的数对(i,j)的个数.给1到n的一个排列,按照某种顺序依次删除m个元素,你的任务是在每次删除一个元素之前统计整个序列的逆序对数. 输入格式 输入第一行包含两个整数n和m,即初始元素的个数和删除的元素个数.以下n行每行包含一个1到n之间的正整数,即初始排列.以下m行每行一个正整数,依次为每次删除的元素. 输出格式 输出包含m行,依次为删除每个元素之前,逆序对的个数. 输入输出样例 输入…
BZOJ_3295_[Cqoi2011]动态逆序对_CDQ分治+树状数组 Description 对于序列A,它的逆序对数定义为满足i<j,且Ai>Aj的数对(i,j)的个数.给1到n的一个排列,按照某种顺序依次删 除m个元素,你的任务是在每次删除一个元素之前统计整个序列的逆序对数 Input 输入第一行包含两个整数n和m,即初始元素的个数和删除的元素个数. 以下n行每行包含一个1到n之间的正整数,即初始排列. 以下m行每行一个正整数,依次为每次删除的元素. N<=100000 M<…