luogu P3767 膜法】的更多相关文章

传送门 这题如果没有删除操作,可以直接使用可持久化并查集 注意到这种可持久化的依赖关系(是这样说的把)是一棵树,然后对于一个点,自己的操作会影响自己的那棵子树,并且如果是删除操作,就会使得一个子树没有加入操作.如果考虑了dfn序,那么每个操作影响的都是一个连续区间,一个删除操作会把一个加入操作的区间挖一个空 于是考虑线段树分治,把依赖关系的树建出来,以dfn序为下标建立线段树,每个点的加入操作都加到线段树的某个区间上去,然后从根出发,遇到一个点就做一遍操作,维护一下带权并查集,顺便把操作影响加入…
[luogu3767]膜法 luogu 神仙题 线段树分治+带权并查集 把每个操作看成点 首先这个操作的结构是一棵树 你发现每个点的对它的子树产生影响 我们可以想到用dfn序把它转成一段区间用线段树分治来做 但是还有删除操作,相当于在一个大区间里面挖掉几个小区间 可以对每个操作开一个vector记录区间搞一搞 然后带权并查集是模5意义下的,可以认为给你的操作相当于从u连向v的一条权值为1或2的边 当u,v在同一个集合时,判断是否满足条件,否则就连边 #define pb push_back #d…
判断整除 总时间限制: 1000ms 内存限制: 65536kB [描述] 一个给定的正整数序列,在每个数之前都插入+号或-号后计算它们的和.比如序列:1.2.4共有8种可能的序列:(+1) + (+2) + (+4) = 7(+1) + (+2) + (-4) = -1(+1) + (-2) + (+4) = 3(+1) + (-2) + (-4) = -5(-1) + (+2) + (+4) = 5(-1) + (+2) + (-4) = -3(-1) + (-2) + (+4) = 1(-…
题目链接:https://cn.vjudge.net/contest/284294#problem/B 题目大意:查询区间内有多少个不相同的数. 具体思路:主席树的做法,主席树的基础做法是查询区间第k大或者第k小的,但是这个地方查询的是区间内不同的数的个数,我们就按照下标建立主席树,对于区间[l,r],我们存储的是区间[l,r]中有多少个不同的数,对于当前的数,如果没有出现过,我们就在第i个位置给他加上,如果已经出现过,我们在建立下一棵主席树的时候,先将之前的这个数的下标对应的值减去1.探后再在…
题目链接:https://cn.vjudge.net/contest/284294#problem/A 题目大意:主席树查询区间第k小. 具体思路:主席树入门. AC代码: #include<iostream> #include<stdio.h> #include<algorithm> #include<vector> using namespace std; # define ll long long ; struct node { int sum; in…
Solution 非常妙的排序啊... 仔细想想好像确实能够找出最优解QUQ 先对第一关键字排序, 在$LCT$ 维护第二关键字的最大值 所在的边. 添边时如果$u, v$ 不连通 就直接加边.  如果连通 并且路径上的最大值 大于 当前边 的 第二关键字, 那么可以换掉. 如果 $1$ 和 $N$ 连通 就 更新答案. 这样就可以保证 在 所有路径上的边 第一关键字 小于等于 当前边 的第一关键字的前提下, 第二关键字的 最大值  最小. 除了这一点不一样, 其他就是模板了. Code #in…
传送门 原题,原题,全TM原题. 不得不说天天考原题. 其实这题我上个月做过类似的啊,加上dzyodzyodzyo之前有讲过考试直接切了. 要求的其实就是∑i=lr(ii−l+k)\sum _{i=l} ^{r} \binom {i} {i-l+k}∑i=lr​(i−l+ki​) 转化一下. 由于(ii−l+k)=(il−k)\binom {i} {i-l+k}=\binom {i} {l-k}(i−l+ki​)=(l−ki​) 于是原式<=>∑i=lr(il−k)\sum _{i=l} ^r…
题目大意 给定若干组询问求$\sum\limits_{i=l}^r \dbinom{i}{k}$. 最终输出每组询问答案的乘积. 题解 首先把$l,r$分开处理相减,只需要求$\sum\limits_{i=1}^r \dbinom{i}{k}$即可 解法一:打表找规律 你会轻而易举的发现$\sum\limits_{i=1}^r \dbinom{i}{k}=\dbinom{r+1}{k+1}$ 解法二:组合数意义 $\sum$在$1....n$个位置放$K$个的方案数$=$在$n+1$个位置安排$…
传送门 求ax%b = 1,即ax - by = 1: 很明显这是一个exgcd的形式. 那么要做这道题,首先需要gcd和exgcd的算法作铺垫. gcd(辗转相膜法): int gcd(int a,int b){ ){ return a; } return gcd(b,a%b); } exgcd就是在求出gcd的基础上,求出ax+by = gcd(a,b)的一组x,y的解: int exgcd(int a,int &x,int b,int &y){ ){ x = ; y = ; retu…
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=5055 这道题……不得不说,从标题到题面都能看出一股浓浓的膜法气息……苟…… 题意就是统计顺序三元组(似乎可以这么叫吧)的乘积和.顺序三元组有个低阶版本叫做顺序对,顺序对有一个亲兄弟叫做逆序对.既然我们可以用值域树状数组来处理关于顺/逆序对,因此也可以尝试用同样的方法处理这道题. 我们可以固定a[j],求剩下的a[i]和a[k].ans=a[j]*sigma(a[i]*a[k]) 于是我们就…