【BZOJ】3295: [Cqoi2011]动态逆序对】的更多相关文章

3295: [Cqoi2011]动态逆序对 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 3865  Solved: 1298[Submit][Status][Discuss] Description 对于序列A,它的逆序对数定义为满足i<j,且Ai>Aj的数对(i,j)的个数.给1到n的一个排列,按照某种顺序依次删除m个元素,你的任务是在每次删除一个元素之前统计整个序列的逆序对数. Input 输入第一行包含两个整数n和m,即初始元素的个数和…
3295: [Cqoi2011]动态逆序对 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 2886  Solved: 924[Submit][Status][Discuss] Description 对于序列A,它的逆序对数定义为满足i<j,且Ai>Aj的数对(i,j)的个数.给1到n的一个排列,按照某种顺序依次删除m个元素,你的任务是在每次删除一个元素之前统计整个序列的逆序对数. Input 输入第一行包含两个整数n和m,即初始元素的个数和删…
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3295 [题意] n个元素依次删除m个元素,求删除元素之前序列有多少个逆序对. [思路] cdq分治 这个题转化一下可以变成刚刚做过的三维偏序. 首先有两个量:序 和 值,可以将样例写成     x   1 2 3 4 5 y   1 5 3 4 2 然后因为我们要删除一些东西,所以加上时间,则样例变为 t   1 2 3 4 5 x   3 5 4 1 2 y   3 2 4 1 5…
Description 对于序列A,它的逆序对数定义为满足i<j,且Ai>Aj的数对(i,j)的个数.给1到n的一个排列,按照某种顺序依次删除m个元素,你的任务是在每次删除一个元素之前统计整个序列的逆序对数 Input 输入第一行包含两个整数n和m,即初始元素的个数和删除的元素个数. 以下n行每行包含一个1到n之间的正整数,即初始排列. 以下m行每行一个正整数,依次为每次删除的元素. N<=100000 M<=50000 Output 输出包含m行,依次为删除每个元素之前,逆序对的…
Description 对于序列A,它的逆序对数定义为满足i<j,且Ai>Aj的数对(i,j)的个数.给1到n的一个排列,按照某种顺序依次删除m个元素,你的任务是在每次删除一个元素之前统计整个序列的逆序对数. Input 输入第一行包含两个整数n和m,即初始元素的个数和删除的元素个数.以下n行每行包含一个1到n之间的正整数,即初始排列.以下m行每行一个正整数,依次为每次删除的元素.   Output   输出包含m行,依次为删除每个元素之前,逆序对的个数. Sample Input 5 4 1…
RT 传送门 首先可以看成倒着插入,求逆序对数 每个数分配时间(注意每个数都要一个时间)$t$,$x$位置,$y$数值 $CDQ(l,r)$时归并排序$x$ 然后用$[l,mid]$的加入更新$[mid+1,r]$的查询(其实每个数就是一个插入一个查询) 这里就是前后求逆序对,用树状数组 #include <iostream> #include <cstdio> #include <algorithm> #include <cstring> using na…
题目大意: 题面传送门 还是一道三维偏序题 每次操作都可以看成这样一个三元组 $<x,w,t>$ ,操作的位置,权值,修改时间 一开始的序列看成n次插入操作 我们先求出不删除时的逆序对总数量,再统计每次删除元素时,减少的逆序对数量 然后就是三维偏序裸题了吧,第一维时间,第二维操作位置,第三维权值,用树状数组维护即可 由于逆序对可以在被删除元素的前面或者后面,所以在归并时需要正反遍历各统计一次 #include <vector> #include <cstdio> #in…
时间.位置.数字为三个属性. 排序时间,CDQ位置,树状数组处理数字即可. #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; #define F(i,j,k) for (int i=j;i<=k;++i) #define D(i,j,k) for (int i=j;i>=k;--i) #define…
题目描述 给定一个1~n的序列,然后m次删除元素,每次删除之前询问逆序对的个数. 分析:分块+树状数组 (PS:本题的CDQ分治解法见下一篇) 首先将序列分成T块,每一块开一个树状数组,并且先把最初的答案统计完成. 对于每一次删除,找到对应位置,考虑删除之后的增减情况: ①块内:直接暴力,对于左边,少了比它大的个数,对于右边,少了比它小的个数, ②块外:枚举每一块.对于左边,少了比它大的个数,对于右边,少了比它小的个数,. 然后把这个位置的数分别从数组和树状数组中删除,. 为了最小化时间,我们使…
[题意] 每次删除一个数,然后问删除前逆序对数. [分析] 没有AC不开心.. 我的树状数组套字母树,应该是爆空间的,空间复杂度O(nlogn^2)啊..哭.. 然后就没有然后了,别人家的树套树是树状数组套平衡树,O(nlogn)的啊.. 别人家的CDQ分治更屌..我垃圾咯. 只是存个代码: #include<cstdio> #include<cstdlib> #include<cstring> #include<iostream> #include<…