传送门 题意简述:给出一个序列,支持把ppp~nnn中所有小于等于apa_pap​的'扯出来排序之后再放回去,要求动态维护全局逆序对. 思路:我们令fif_ifi​表示第iii个位置之后比它大的数的个数,考虑到一个数在排一次序之后fif_ifi​就变成了000,因此等价于每个位置最多修改一次,我们用树状数组先求出fif_ifi​,然后上线段树来暴力修改即可. 代码: #include<bits/stdc++.h> #define ri register int using namespace…
6318.Swaps and Inversions 这个题就是找逆序对,然后逆序对数*min(x,y)就可以了. 官方题解:注意到逆序对=交换相邻需要交换的次数,那么输出 逆序对个数 即可. 求逆序对有4种操作,线段树 .BIT.归并排序.树状数组. 我敲了线段树.归并排序和树状数组版的. 关于这几种方法求逆序对,自行百度吧,懒了... 代码(线段树版-注意排序): //1010-找逆序对数-线段树求逆序对数 #include<iostream> #include<cstdio>…
题目描述 对于序列A,它的逆序对数定义为满足i<j,且Ai>Aj的数对(i,j)的个数.给1到n的一个排列,按照某种顺序依次删除m个元素,你的任务是在每次删除一个元素之前统计整个序列的逆序对数. 输入 输入第一行包含两个整数n和m,即初始元素的个数和删除的元素个数.以下n行每行包含一个1到n之间的正整数,即初始排列.以下m行每行一个正整数,依次为每次删除的元素. 输出 输出包含m行,依次为删除每个元素之前,逆序对的个数. 样例输入 5 4 1 5 3 4 2 5 1 4 2 样例输出 5 2…
Time Limit: 10 second Memory Limit: 2 MB 问题描述 给定一个序列a1,a2...an.如果存在i小于j 并且ai大于aj,那么我们称之为逆序对,求给定序列中逆序对的数目 Input 第一行为n,表示序列长度,接下来的n行,第i+1行表示序列中的第i个数. Output 所有逆序对的总数 Sample Input 4 3 2 3 2 Sample Output 3 [题解] n的最大值为10W. 如果用线段树来解的话,求解的思路都相同. 我就直接复制前一篇的…
逆序对的定义:长度为n的数组a,求满足i<j时a[i]>a[j]条件的数对个数. 第一次接触这种问题的人可能是更先想到的是n^2去暴力数前面有几个比他大的数. int main() { int n; while(~scanf("%d", &n), n) { ans = ; ; i <= n; i++) scanf("%d", &a[i]); ; i <= n; i+=) ; j < i; j+=) if(a[j] >…
传送门 线段树合并菜题. 题意简述:给一棵带点权的有根树,多次询问某个点ppp子树内距离ppp不超过kkk的点的点权最小值,强制在线. 思路: 当然可以用dfsdfsdfs序+主席树水过去. 然而线段树合并也是一个不错&&好写的思路 我们按照深度为下标建立权值线段树然后线段树合并预处理一波. 查询就转化成区间查询了. 注意因为要保存下每一个子树的信息所以合并的时候要新建节点来储存信息. 代码: #include<bits/stdc++.h> #define ri registe…
传送门 线段树合并菜题(然而findfindfind函数写错位置调了好久) 支持的操作题目写的很清楚了,然后有一个神奇的限制c≤7c\le7c≤7要注意到不然会去想毒瘤线段树的做法. 思路: 这题只有一个新奇的操作就是比较两个连通块的所有点权的乘积的大小. 这个东西可以对所有点权取对数之后转化为比较加和的大小. 剩下的都可以用并查集+线段树合并秒掉. 注意题目卡空间 代码: #include<bits/stdc++.h> #define lc (son[p][0]) #define rc (s…
传送门 线段树合并菜题. 题意简述:nnn个点,支持连边以及查询一个点所在连通块中经过这个点的路径条数,保证这张图时刻为森林. 思路: 先建出所有操作完之后的树统计出dfsdfsdfs序 注意有可能是森林而不是树 然后用线段树合并维护每棵子树的sizesizesize即可. 为了方便,我们将每个节点的ininin作为下标插入线段树中,这样可以方便的统计出一棵子树在[inv,outv],v∈subtree[in_v,out_v],v\in subtree[inv​,outv​],v∈subtree…
在这个问题中,您必须分析特定的排序算法----超快速排序. 该算法通过交换两个相邻的序列元素来处理n个不同整数的序列,直到序列按升序排序. 对于输入序列9 1 0 5 4,超快速排序生成输出0 1 4 5 9. 您的任务是确定超快速排序需要执行多少交换操作才能对给定的输入序列进行排序. 输入格式 输入包括一些测试用例. 每个测试用例的第一行输入整数n,代表该用例中输入序列的长度. 接下来n行每行输入一个整数aiai,代表用例中输入序列的具体数据,第i行的数据代表序列中第i个数. 当输入用例中包含…
Minimum Inversion Number [题目链接]Minimum Inversion Number [题目类型]最小逆序数 线段树 &题意: 求一个数列经过n次变换得到的数列其中的最小逆序数 &题解: 先说一下逆序数的概念: 在一个排列中,如果一对数的前后位置与大小顺序相反,即前面的数大于后面的数,那末它们就称为一个逆序. 一个排列中逆序的总数就称为这个排列的逆序数.逆序数为偶数的排列称为偶排列:逆序数为奇数的排列称为奇排列. 如2431中,21,43,41,31是逆序,逆序数…