
线段树
新笑雨
这个作者很懒,什么都没留下…
展开
-
luogu 5787
题目链接解法线段树分治:首先对于动态加边,并且维护图是否是二分图,可以使用带权并查集,一个点拆成两个,分别表示这个点染黑色还是白色。每次加边维护并查集就可以了。然后对于这个题,就是把每条边出现的时间对应到线段树上的区间,在每个线段树节点上用一个vector维护时间段和该节点有交的边。最后一次dfs处理所有边:进入一个节点后,先把所有边加入并查集,如果不是二分图,那么整个节点一定不是二分图。...原创 2020-03-21 16:10:51 · 164 阅读 · 0 评论 -
一道线段树练习题
题意注意收到的伤害值写的有点问题,实际上是a2+∑j=1k(Ai,j−Cj)2\sqrt{a^2+\sum_{j=1}^k(A_{i,j}-C_j)^2}a2+∑j=1k(Ai,j−Cj)2,没有后面的-a数据范围时限6S解法首先由于题目中的限制“选了第i个敌人就再也不能和1到i-1的敌人作战”,我们可以观察后得出dp:ans[i]=min(ans[u]+∑j=1k(Ai,j...原创 2020-02-24 17:17:38 · 155 阅读 · 0 评论 -
codeforces 1295E
题目链接题意有一个排列p,需要先将其在中间分割开,分割成非空的两个部分,然后每个p[i]有一个权值a[i],意思是把p[i]从一个集合调整到另一个集合的代价是a[i],要求最后第一个集合里的所有数都比第二个集合里的数小。球最小花费数据范围∣p∣≤2e5,a[i]≤1e9|p|\le 2e5,a[i]\le 1e9∣p∣≤2e5,a[i]≤1e9解法考虑枚举最终第一个集合的大小,从0到n...原创 2020-01-30 19:52:30 · 200 阅读 · 0 评论 -
一道线段树练习题
题意解法首先考虑一个O(n2)O(n^2)O(n2)的解法,我们先考虑求出不含任何星星的矩形个数,这个可以考虑单调栈做法,具体而言,对于每个右下角,它的左上角形成的图形是一个台阶的形状,然后就枚举每一行,然后首先计算每个位置出现星星的最晚时间,用单调栈维护每个位置向后第一个出现星星时间比当前时间晚的位置,转移的时候对一些区间加等差数列.然后考虑更快的做法:将单调栈换成线段树,然后维护同...原创 2020-01-17 20:22:22 · 136 阅读 · 0 评论 -
codeforces 700E
题目链接题意给一个字符串S,要求构造字符串序列s1,s2,...,sks_1,s_2,...,s_ks1,s2,...,sk,满足任意s都是S的子串,且任意i∈[2,n],都有sis_isi在si−1s_{i-1}si−1里出现了至少2次,问k最大可以是多少。数据范围∣S∣≤200000|S|\le 200000∣S∣≤200000解法SAM+线段树合并考虑先对原串建出SA...原创 2020-01-14 19:05:56 · 220 阅读 · 0 评论 -
uoj 418
原题题意:Snuke 有一棵nnn个点的有根树,每个点有权值wiwiwi,初始每个结点上都没有石子。Snuke 准备了一些石子,并把它们拿在手中。她可以进行以下两种操作任意多次:1 从手中取wiwiwi个石子放在结点iii上,进行该操作要求结点 iii 的所有孩子 jjj 上都有 wjwjwj个石子。2 将结点iii上的所有石子收回手中。Takahashi 想知道对于每个iii,为了在...原创 2019-12-25 18:16:44 · 302 阅读 · 1 评论 -
线段树维护最大子段和
要点查询的时候返回一整个线段树节点,而不是一个值,这样才有足够的信息去处理问题。因为最大子段和如果跨过一些节点,那么这个最大子段和的信息本身不一定可以被每个节点所代表的区间的最大子段和表示,所以需要合并一些节点的信息。#include<bits/stdc++.h>using namespace std;const int maxn=5e4+5;inline int read...原创 2019-12-20 21:13:52 · 498 阅读 · 0 评论 -
一道字符串练习题
题意:求一个字符串有多少本质不同的子串,这里的不同指两个子串的最小表示法不同.数据范围:n<=5e4,1<=a[i]<=n,其中n是字符串长度,a[i]是字符n<=5e4,1<=a[i]<=n,其中n是字符串长度,a[i]是字符n<=5e4,1<=a[i]<=n,其中n是字符串长度,a[i]是字符首先,如果不同指字符串本身不同,那么有经...原创 2019-12-20 21:14:41 · 244 阅读 · 0 评论 -
一道线段树练习题
首先我们有一个考虑枚举每个mex,计算其贡献的想法.即有多少个区间的mexmexmex是我们当前枚举的这个值.然后我们手画一下图,可以发现,一个数如果想要成为一个区间的mexmexmex,必须要这个区间已经出现了所有比它小的数.所以可以从小到大枚举mexmexmex,然后用rrr数组记录对于一个左端点,满足条件的右端点最近的位置,这样就能帮助我们确定之后的mexmexmex在哪些区间.然后...原创 2019-12-20 21:14:52 · 178 阅读 · 0 评论