bzoj 3295 动态逆序对 CDQ分支】的更多相关文章

容易看出ans[i]=ans[i-1]-q[i],q[i]为删去第i个数减少的逆序对. 先用树状数组算出最开始的逆序对,预处理出每个数前边比它大的和后边比它小的,就求出了q[i]的初始值. 设b[i]是第i个删除的数,pos[i]为i在数列里的位置. 对q[i]产生影响的是   1. j<i,pos[b[j]]<pos[b[i]],b[j]>b[i].  2.j<i,pos[b[j]]>pos[b[i]],b[j]<b[i]. 因为是三维的,所以我们套一层cdq. #i…
BZOJ 3295 动态逆序对 这道题和三维偏序很类似.某个元素加入后产生的贡献 = time更小.pos更小.val更大的元素个数 + time更小.pos更大.val更小的元素个数. 分别用类似CDQ分治求三维偏序的方法求即可. #include <cstdio> #include <cstring> #include <algorithm> using namespace std; typedef long long ll; #define space putch…
链接:https://www.lydsy.com/JudgeOnline/problem.php?id=3295 思路: 可以将这道题看成倒着插入,这样就可以转化成求逆序对数,用CDQ分治降维,正反用树状数组求两遍逆序对就好了. 这道题还可以用在线的树套树或者可持久化线段树来写.. 实现代码: #include<bits/stdc++.h> using namespace std; #define ll long long ; struct node{ int t,x,y; int kind,…
调了好久.... 转化成三维偏序,cdq处理. 好像比较快? #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #define maxn 300500 using namespace std; ; struct pnt { long long a,b,c,ans; }p[maxn]; bool cmp1(pnt x,pnt y) {return x.b<y…
题目链接 思路和bzoj2141差不多,不过这道题的数据更强一些,线段树套treapT了,树状数组套treap卡过~~ #include<bits/stdc++.h> using namespace std; typedef long long ll; ,inf=0x3f3f3f3f; ][],val[N*],siz[N*],rd[N*],tot,a[N],b[N]; ll ans; ]]+siz[ch[u][]]+;} ,val[u]=x,rd[u]=rand(),ch[u][]=ch[u]…
动态逆序对 CDQ分治 传送门:https://www.luogu.org/problemnew/show/P3157 题意: 对于序列A,它的逆序对数定义为满足i<j,且Ai>Aj的数对(i,j)的个数.给1到n的一个排列,按照某种顺序依次删除m个元素,你的任务是在每次删除一个元素之前统计整个序列的逆序对数. 题解: 这个题是告诉你如何将一个问题转换为三维偏序问题 首先,求解逆序对,那么a.val>b.val,删除一个元素的时间是t,a.t<b.t,这个元素对应的原序列中的位置为…
3295: [Cqoi2011]动态逆序对 Time Limit: 10 Sec  Memory Limit: 128 MB Description 对于序列A,它的逆序对数定义为满足i<j,且Ai>Aj的数对(i,j)的个数.给1到n的一个排列,按照某种顺序依次删除m个元素,你的任务是在每次删除一个元素之前统计整个序列的逆序对数. Input 输入第一行包含两个整数n和m,即初始元素的个数和删除的元素个数.以下n行每行包含一个1到n之间的正整数,即初始排列.以下m行每行一个正整数,依次为每次…
题目链接:https://vjudge.net/problem/HYSBZ-3295 3295: [Cqoi2011]动态逆序对 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 6517  Solved: 2295[Submit][Status][Discuss] Description 对于序列A,它的逆序对数定义为满足i<j,且Ai>Aj的数对(i,j)的个数.给1到n的一个排列,按照某种顺序依次删 除m个元素,你的任务是在每次删除一个元素之…
3295: [Cqoi2011]动态逆序对 题目:传送门 题解: 刚学完cdq分治,想起来之前有一道是树套树的题目可以用cdq分治来做...尝试一波 还是太弱了...想到了要做两次cdq...然后伏地膜大佬 其实需要维护的地方还是很容易想到的: 第一维维护位置w,第二维维护数值s,第三维维护修改的时间t. 那么对于t我们可以倒序插入,然后我们就可以把它看作t从小到大的插入结点(即使没有删除的点为了方便也要更新一下t). 再去观察就会发现,当我们插入一个节点t0时,我们需要求的就是在t0左边的比它…
[BZOJ3295][Cqoi2011]动态逆序对 Description 对于序列A,它的逆序对数定义为满足i<j,且Ai>Aj的数对(i,j)的个数.给1到n的一个排列,按照某种顺序依次删除m个元素,你的任务是在每次删除一个元素之前统计整个序列的逆序对数. Input 输入第一行包含两个整数n和m,即初始元素的个数和删除的元素个数.以下n行每行包含一个1到n之间的正整数,即初始排列.以下m行每行一个正整数,依次为每次删除的元素. Output 输出包含m行,依次为删除每个元素之前,逆序对的…