ZOJ Problem Set - 4053 Couleur Time Limit: 6 Seconds      Memory Limit: 131072 KB DreamGrid has an array of  integers. On this array he can perform the following operation: choose an element that was not previously chosen and mark it as unavailable.…
题意: 有n个位置,每个位置上的数字是a[i],现在有强制在线的若干个单点删除操作,每次删除的位置都不同,要求每次删除之后求出最大的连续区间逆序对个数 n<=1e5,1<=a[i]<=n 思路: 对于每次删除操作我们可以考虑被删除的数字的贡献 比如区间[l,r]内删除了x这个位置,被分成了[l,x-1]与[x+1,r]两个区间 未删除之前区间总逆序对数可以分为4个部分:[l,x-1]内部,[x+1,r]内部,跨区间,一端为x 一个优秀的结论是内部区间和跨区间部分可以选择两端区间内较小的一…
上午看书总结 今天上午我看了拓扑排序,DFS+剪枝,相当于回顾了一下,写了三个比较好的例题.算法竞赛指南93~109页. 1.状态压缩+拓扑排序 https://www.cnblogs.com/2462478392Lee/p/11285039.html 2.DFS+剪枝 https://www.cnblogs.com/2462478392Lee/p/11285065.html 3.DFS+剪枝+数学 https://www.cnblogs.com/2462478392Lee/p/11285085…
传送门 突然发现好像没有那么难……https://blog.csdn.net/stone41123/article/details/78167288 首先有两个操作,一个查询,一个连接 查询的话,直接在树上建主席树 然后难点在于连接 用启发式合并就可以了(想了半天都没想出来) 每次合并时,我们把小的树接到大的上,然后dfs一遍小的树,更新信息 然后注意数组……别太小也别太大……(被数组大小坑了好几次提交) //minamoto #include<bits/stdc++.h> using nam…
P3302 [SDOI2013]森林 主席树+启发式合并 (我以前的主席树板子是错的.......坑了我老久TAT) 第k小问题显然是主席树. 我们对每个点维护一棵包含其子树所有节点的主席树 询问(x,y)的时候用倍增找到(x,y)的lca,蓝后树上差分一下,即: $total_{size}=sum[x]+sum[y]-sum[lca]-sum[fa[lca]]$ 至于合并两棵树........我们把小的那棵树接到大的那棵上,并把小树上的主席树都重构一遍 这就是启发式合并,合并的复杂度大概为$O…
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=3123 题解 如果是静态的查询操作,那么就是直接树上主席树的板子. 但是我们现在有了一个连接两棵树的操作. 那么我们就采取启发式合并的方法来暴力重新建主席树. 对于表示树上前缀和的主席树来说,连接两条边以后,会影响到的点只有其中的一棵树. 所以不妨把较小的那一棵树暴力重新建立主席树. 另外由于树形态不固定,所以要用倍增 lca. 时间复杂度 \(O(n\log^2n)\),空间复杂度 \(O(…
题意:一个带点权的森林,要求维护以下操作: 1.询问路径上的点权K大值 2.两点之间连边 n,m<=80000 思路:如果树的结构不发生变化只需要维护DFS序 现在因为树的结构发生变化,要将两棵树合并,这步可以用启发式合并,将比较小的树暴力连接到较大的树上面 离线的LCA算法无法维护,而倍增可以合并,所以用倍增求LCA 其余就是主席树,维护根到点的权值线段树就行了 机房里的罗爷爷写法比我高到不知道哪里去了 #include<cstdio> #include<algorithm>…
Description Input 第一行包含一个正整数testcase,表示当前测试数据的测试点编号.保证1≤testcase≤20. 第二行包含三个整数N,M,T,分别表示节点数.初始边数.操作数.第三行包含N个非负整数表示 N个节点上的权值.  接下来 M行,每行包含两个整数x和 y,表示初始的时候,点x和点y 之间有一条无向边, 接下来 T行,每行描述一个操作,格式为“Q x y k”或者“L x y ”,其含义见题目描述部分. Output 对于每一个第一类操作,输出一个非负整数表示答…
3123: [Sdoi2013]森林 题意:一个森林,加边,询问路径上k小值.保证任意时刻是森林 LCT没法搞,树上kth肯定要用树上主席树 加边?启发式合并就好了,小的树dfs重建一下 注意 测试点编号不是数据组数!!! 加边的时候要更新邻接链表啊,并且fa要清空 并查集维护size一定初始化1 好了现在我要填报名表了 #include <iostream> #include <cstdio> #include <cstring> #include <algor…
这题的想法真的很妙啊. 看到题的第一眼,我先想到树链剖分,并把\(DFS\)序当成一段区间上主席树.但是会发现在询问的时候,可能会非常复杂,因为你需要把路径拆成很多条轻链和重链,它们还不一定连续,很难做(这个做法貌似可以用于子树第\(k\)大问题). 于是我们换一个思路,让某个点的从它的父亲继承信息,也就是让这个结点对应的主席树维护一条从它到根的链. 那查询该如何是好?假设要查询的结点为\(x,y\),我们利用树上差分的思想让\(x,y,lca(x,y),fa[lca(x,y)]\)对应的四棵主…