随笔分类 - 数据结构
数据结构
摘要:https://codeforces.com/contest/1270/problem/H 考虑一个联通块一定是一个连续段,可以反证,假设有两段,发现中间的数一定会和两段相连。 那么其实就是要求分界点的个数。 一个分界点可以定义为左边的数全部大于等于右边的数。 那么枚举一个$v\in a[i]$,把
阅读全文
摘要:https://www.luogu.com.cn/problem/P3747 已经记不请上一次遇到扩展欧拉定理是什么时候了。 $a^b~mod~p=$ $bp0$后,都和$cnt=p0+1$时的值一样 注意是和$cnt=p0+1$时的值一样,为了方便,多开一位: 用线段树维护区间$cnt$最小值,如
阅读全文
摘要:https://loj.ac/problem/2513 清真化简题 不妨考虑枚举每一个元素统计它出现的系数 它的权值。 $a[x]$和$a[n x+1]$的出现次数是一样的,因此整个序列只剩下了一半。 先考虑$a "x" /2)$在长度$y$会出现多少次。 经过讨论,发现是$min(x,y,n y+
阅读全文
摘要:https://loj.ac/problem/2496 这题给我感觉才是day1 最简单的题,一点都不毒瘤。 先考虑保留一个生成树,对于非树边,我们可以容斥,选其中$i$条边,使得这$i$条边一定不合法,也就是这$i$条边对应的点一定选,容斥系数是$( 1)^i$ 暴力就容斥完之后再做个树形dp,时
阅读全文
摘要:https://loj.ac/problem/2495 考虑最优的决策,有一种是一直往右走,不在一个点上等,为什么是对的呢? 证明:如果在一个点上等一刻,不如把起点往前移一位。 破环为链复制一遍以方便记答案。 首先需要的时间一定$\ge n 1$,不妨枚举倒数第$n$个点是$i$,再考虑走到$i$的
阅读全文
摘要:https://loj.ac/problem/2434 先考虑$a[i]$确定时,答案怎么求? 设$s[x]$表示$x$为根的子树的$a$的和。 对于每一个$x$为根的子树,假设确定了$x$的儿子的子树的答案,接下来合并,那么显然是尽可能插空合并。 设$max=max(a[x],s[y1],s[y2
阅读全文
摘要:$n\le 500000$ https://gmoj.net/senior/ main/show/6555 一个发现是我们肯定可以选长度为$1,2,3,…$的一组解。 那么长度不超过$\sqrt {2n}$,做一个dp,设$f[i][j]$表示$j$为开头,长度为$i$,是否可以。 用hash去找相
阅读全文
摘要:https://loj.ac/problem/510 对于$n2$时add循环很多次。 比如$k=3$,一开始最低位$=1$,每次$ 2~mod~k$,会在1、2、1、2循环,就达到了$O(n)$。 考虑k是奇数,会一直在一位循环,$x$到$x+low(x)$形成的森林其实是若干条链,因为不可能有其
阅读全文
摘要:https://loj.ac/problem/2289 题目里给的提示很明显了,我们要用泰勒公式去做这些函数,因为泰勒公式收敛的很快,只用保留个前十几项精度就够了。 那么就是求那三种函数的$i1)}=0$ 有了公式之后就可以算出,剩下的就是lct维护路径和的事。 Code:
阅读全文
摘要:https://gmoj.net/senior/ main/show/6525 若没有洞的限制,答案显然从每个点出发的极大联通块(联通块的每个点高度小于等于起点高度)的大小和。 那么将高度排序,从小到大用并查集维护即可。 现在要看有没有洞,考虑平面图欧拉公式: $V+F=E+2$,其中$V$是点
阅读全文
摘要:https://loj.ac/problem/2473 求恰好第k大的权值显然不可做,差分一下,转换成: 枚举$W$,求第k大$ =W$的方案数,发现对所有这样的$W$的方案数加起来就是答案。 这样就相当于权值$ =W$选了有1的贡献,权值$=k$的方案数。 显然这个可以用暴力树形依赖背包在$O
阅读全文
摘要:https://loj.ac/problem/2472 $i$到$i/k$连一条边,就构成了一个森林,先将d排序。 一个点的取值必须是子树内最大的。 考虑当$d[i]$互不相同的话,只需要按顺序,给每个子树分配尽量大的价值即可。 如果x为根的子树必须在$[l,r]$里,那么对于新来的x的一个子节
阅读全文
摘要:https://loj.ac/problem/3038 题解: 只考虑从左往右是怎么做的,从右往左同理。 如果是x y,那么最优的方案肯定是一直往右走。 考虑从x x+1,时间会加1,这让我们非常不爽。 不妨把$l[i] =i,r[i] =i$,这样就不用考虑走边带来的时间+1(硬要考虑也是行的)。
阅读全文
摘要:题目大意: 有n条直线,求它们两两之间的交点到(p,q)前m近的距离和。 $n \le 50000, m \le 10^7$ 题解: 二分答案r,肯定的。 接着就是求有多少个交点到(p,q)的距离 define fo(i, x, y) for(int i = x, _b = y; i = _b; i
阅读全文
摘要:https://loj.ac/problem/6187 题解: 看到奇数时就应该想到随机的,最近两次遇到这种题了。 考虑给每一个数随机一个权值$v[i]$。 一个区间$[x,y]$所有数的出现次数是奇数,相当于$v[x..y]$的异或和 等于 $la[i] define fo(i, x, y) fo
阅读全文
摘要:https://loj.ac/problem/3034 设$sa$表示a的前缀和,sb表示b的前缀和。 设$f[i][j]$表示n个中的前i个、m个中的前j个完成了,最大的分数和。 如果把第一维去掉,$f[i]$是由$f[i 1]$加上一些修改得到。 那么就是先: 1.$f[j]+=a[i](sa[
阅读全文
摘要:http://codeforces.com/problemset/problem/603/E 题解: 先思考对于一个图怎么样是合法的? 如果这个图有奇数大小的联通块,显然不行: 因为一条边会使度数和+2,度数和始终是偶数,而奇数大小联通块要求的度数和是奇数。 大胆猜测这也是充分条件。 证明的话,对于
阅读全文
摘要:https://loj.ac/problem/3033 题解: 这题的线段树维护有点妙。 $|h[i] h[j]|=max(h[i] h[j],h[j] h[i])$,所以作两遍就不用考虑绝对值了,考虑现在是$h[j] h[i]$。 用线段树维护每个位置的标记, 每个位置的标记有$p[x]、q[x]
阅读全文
摘要:https://loj.ac/problem/3153 题解: 若有$a[i]、a[j](i=a[i],a[j]$,则$a[i]、a[mid]$作为前两个一定更优。 那么,所以有用的$a[i]、a[j]$便缩减到了$O(n)$个,具体为每个数和它左边第一个比他的大的数形成的对+每个数和它右边第一个大
阅读全文
摘要:题目地址: LOJ3252~3256 "「JOI 2020 Final」只不过是长的领带" 先把a、b分开排好序。 不难想到最优的方法是直接对应匹配。 所以每一个a[i]只会和b[i]或b[i+1]匹配。 a[i]和b[i]匹配适用于挖的点在i之后。 a[i]和b[i+1]匹配使用挖的点在i+1之前
阅读全文

浙公网安备 33010602011771号