随笔分类 - 算法-数据结构
摘要:发现是求[ice的和]与[fire的和]的较小值的最大值。ice的和,是一个单调不下降的函数,fire的和,是一个单调不上升的函数。两者较小值的最大值,显然在它们相交的地方取到。二分相交的地方。用数据结构分别维护ice和fire,时间复杂度O(nlog^2n)。直接在线段树上二分,复杂度O(nlogn),但是常数较大。用树状数组上倍增的技巧代替线段树上二分,就可以了
阅读全文
摘要:考虑预处理出s的每个子串是不是t的子串。发现对于一个左端点i,是t子串的右端点是从i开始的一段连续的区间,我们记这样的最大右端点为R[i]。对t建SAM,可以通过在SAM上跳求出R[1...n]。然后对于询问l,r。分r<=R[i]和r>R[i]两类讨论。那么相当于一个二维的区间最大值查询。通过离线去掉一维,另一维用线段树维护即可。
阅读全文
摘要:把枚举位置改成枚举值,那么只要判断,值域序列上,两侧,对应的位置里有没有一个小于pos[i],一个大于pos[i]。大于、小于分别看做01,那么就是要判断01序列有没有不相等的值。可以用bitset或哈希。
阅读全文
该文被密码保护。
该文被密码保护。
摘要:集合内两两距离小于等于x,等价于集合里深度最大的点,到所有其他点距离均小于等于x。把所有点按深度排序。依次枚举一个点作为深度最大的点,然后将它标记。我们每次要求所有已标记的点中到当前点距离小于等于x的点的数量。可以用点分树+树状数组统计。统计出这个后,做一遍FFT求出答案
阅读全文
摘要:选入了一些比较简单的题。太偏的和太难的,就不放进来啦~
阅读全文
摘要:维护每个数上一次、下一次出现的位置:pre[i]和nxt[i]。“某个数在区间里是否出现”的问题,转化为“区间里nxt[i],pre[i]的最大、最小值”的问题。枚举三元组(i,j,k)中的k,对每个j维护最大的i和最小的i,那么答案就是Σmaxi[j]-mini[j]+1。对maxi和mini分别求和。考虑从k-1变成k时对它们的影响。发现需要支持区间对一个数取min。用吉老师线段树维护即可。
阅读全文
摘要:求最大值不具有可减性,所以无法通过一般的数据结构实现删除。考虑二分答案,将最大值问题转化为数量问题。但是每次二分后要暴力加入所有权值大于mid的路径,单次询问时间复杂度太高。注意到对于二分时相同的“答案区间”,要加入的其实是同一些路径。所以做整体二分即可
阅读全文
摘要:[toc] "比赛链接" CF1348D Phoenix and Science 分析问题的性质。首先,每块的大小是无关紧要的,重要的是你每天会切多少块。这取决于两个因素:当前已有的块数$d$,当前所有块的总和$w$。假设你今天要新切$x$刀,那么显然,$i$必须满足:$0\leq x\leq d$
阅读全文
摘要:"题目链接" 朴素的做法是枚举左、右端点。用$\texttt{set}$维护区间内不同值的数量,时间复杂度$O(n^2\log n)$。 考虑优化这个做法,就必须避免枚举左、右端点。一种想法是,枚举$f(l,r)$的值,然后计算这个值的出现次数。这是经典的算贡献的思想,但是似乎无法快速求出一个$f(
阅读全文
摘要:如果$\lfloor\frac{i}{k}\rfloor\neq 0$,就从$i$向$\lfloor\frac{i}{k}\rfloor$连边,则可以得到一个森林。问题转化为:给森林里每个节点安排一个点权,在保证后代的点权$\geq$祖先点权的前提下,使按编号排列时的字典序最大。 把所有权值按从小到
阅读全文
摘要:题目链接 经过观察,不难发现好序列的一些性质。 性质一:一个序列是好序列,当且仅当$\max-\min+1=r-l+1$。其中$\max$表示序列里的最大值,$\min$表示序列里的最小值。 性质二:如果两个好序列相交,其交叉部分一定也是好序列。 证明:设交叉部分的最大、最小值分别为$\max$,
阅读全文
摘要:考虑一个没有Monotone Triples的序列具有哪些性质。 当序列长度为$3$时,一定是以下两种情况之一: $a_1a_3$。即先上升,后下降。至于$a_1,a_3$的大小关系,没有要求。 $a_1 a_2,a_2\max(a_1,a_4),\min(a_2,a_3)a_i$的位置$x$,再找
阅读全文
摘要:感谢 myt 神仙教会了我树状数组!Orz! 果树和人是相对运动的,因为是对人做询问,所以可以考虑让人不动,果树运动。这样的好处是可以把人的结构固定下来,便于用数据结构维护。 具体来讲,对于所有$i\in[1,n]$,我们从第$i$个人向逆时针方向第一个到他的距离$\geq C$的人$j$连边。表示
阅读全文
摘要:LOJ3277 「JOISC 2020 Day3」星座 3 题目大意 题目链接 建议直接阅读原题题面。 本题题解 考虑一个区间,初始时为$[1,n]$。每次找出区间中楼房的最大高度$mx$。高度为$mx$的这些楼房把区间划分为了若干段,我们继续递归每一段。递归的边界是区间内所有楼房高度相同时不再递归
阅读全文
摘要:可以发现答案是单调不增的,于是问题可以转化为,判断大于等于某个数的值,能否全部被炸弹。从右往左看第 i 个关键点右边是否至少有 i 个炸弹即可。
阅读全文