- 博客(29)
- 收藏
- 关注
原创 线段树分治+可撤销并查集 学习笔记
题目一般是给你边或者点的出现时间区间[Li,Ri],问你在某些时间里1能访问到的点或者点的数量。先考虑暴力的思路,就是对于一个具体的时间节点,我们去暴力地得知当前边/点是否出现,并且跑图查看是否联通。由于一个具体的时间节点前后联通情况大致相似,我们考虑是否可以在继承前一个时间节点的情况下,只是局部改变一些点和边的情况?因为我们是去查看图的联通,免不了使用并查集。当一条边加入进来好处理,但如果删除呢?线段树分治+可撤销并查集就是用来解决此类问题。
2024-07-21 16:59:02
238
原创 2024 杭电多校第一场
并且合并时一般不会重复地合并某个线段树,所以我们最终增加的点数大致是nlogn级别的。(摘自oiwiki)你需要对于每个节点 i ,计算 ansi=∑u∈subtree(i),v∈subtree(i)f(u,v) ,其中 subtree(i) 表示 i 的子树。右区间一定大于左区间,当我们算两个子树合并的贡献时,用右区间的区间平方数乘上左区间的区间个数可以得到。定义一个点对的值 f(u,v)=max(Au,Av)×|Au−Av|。如果v在u子树里,v子树的答案已经算过了,在算u时直接加上v的答案即可。
2024-07-20 00:21:04
758
1
原创 0716 个人赛 题解报告
N <=40Ai <=1e9如果DFS爆搜的话,喜提的爆炸超时。所以考虑优化是一定的,假如我们能优化到就可以稳过。那么不妨将n分为前一半和后一半,存前一半能到达的所有状态,存后一半能到达的所有状态,然后双指针去比较。
2024-07-16 20:36:31
299
原创 0714个人赛补题
题意翻译: 给定一个序列A,找出A中最长的子序列B满足相邻 的两个数的差值不小于D。暴力dp思路:dp[i]为以i结尾的子序列最长长度。复杂度显然会超时。对于i,查询其前面最大的dp[j],我们可以想到使用线段树,可以将n优化到logn。
2024-07-15 20:10:07
772
原创 USACO 24 JAN 补题
她将整数分成两堆:Bessie 堆和助手堆。如果 Bessie 和一个助手同时向数组添加整数,Bessie 的整数将优先被添加,因为她是领导者。在p+(p-1)的时间放第二个数,在此之前小于2*p-1 的数都应该被放完...... 在(p+1)*p/2的时间放最后一个数,在此之前所有的数都应该被放完。如果我们发现在Bessie放完数之后还有数没放,那么这个p就不属于我们讨论的[Bessie放最后一个]的情况。请帮助 Bessie 划分她的数,使得最终得到的数组是排序的,并使得排序该数组所需的时间最少。
2024-07-12 13:12:39
378
原创 USACO 24 FEB 补题
Bessie 和 Elsie 正在玩弹珠游戏。游戏的玩法如下:Bessie 和 Elsie 开始时各有一定数量的弹珠。Bessie 取出 A 个弹珠放在蹄子下,Elsie 猜测 A 是偶数还是奇数。如果 Elsie 猜对了,她从 Bessie 那里赢得 A 个弹珠,如果她猜错了,她输给 Bessie A 个弹珠(如果 Elsie 有少于 A 个弹珠,她就会输掉所有弹珠)。一名玩家失去所有弹珠时即失败。游戏进行了一定回合后,Elsie 拥有 (1≤N≤109)个弹珠。她感觉获胜很难,但她只是想不要输。
2024-07-11 11:03:40
421
原创 USACO 24 OPEN 补题
题意是使得对于任意01字符串s1...sn,不存在i,j ,使得si为sj 的前缀。你可以进行的操作使在原来的01字符串后面加0/1,问最少操作次数。做法:建01字典树,ed[i]去统计有多少字符串以当前结点为结尾,f[i]为增加一个以当前结点为结尾的字符串需要进行多少次操作。假如当前结点为叶子节点,f[i]=2;如果当前结点只有一个儿子,f[i]=1;如果当前结点有左右儿子lt,rt,则f[i]=min(f[lt],f[rt])+1。
2024-07-10 10:45:47
132
原创 江苏省赛H. Reverse the String题解
思路:要求字典序最小的串,我们肯定希望越前面的字符越小越好。那么我们从前往后去看当前的字符:假如当前的字符可以通过一次区间翻转变成字典序更小的字符,那么我们肯定不会考虑后面的区间翻转。我们采取二分+哈希,去找到不同情况翻转后的最大公共前缀,然后判断第一个它们不相同的位置上谁的字典序更小即可。首先右端点对应的字母肯定越小越好,我们找到比b小的a,那么只需要去找a存在的位置,一个个去枚举即可。此时我们找到了区间翻转的左端点,然后我们接下来去找右端点。那么对于不同的翻转情况,如何去判断区间翻转哪种更优?
2024-04-30 22:04:48
127
原创 2024nomomo冬令营算法笔记
f(i,j) g(i,j)表示a,b数组定下前i个数的取值使得总的和为j的方案数,发现复杂度过大。优化为f(i,j,k)表示a取前i个数,b取前j个数,a、b的差值为k的方案数。因为我们最终要求的答案是对于任意的i任意的j,k=0的方案数,根据“水多加面,面多加水”的思想,当k>0时我们去取下一个b,当k
2024-01-23 22:33:11
797
原创 周五讲题 | 好题积累
再进行子集dp ,对于某个小子集 的贡献, 一定 也是属于它的大子集的贡献,换句话说,假如我需要abc, 但我给你abcd 一定能满足 你的条件。对于其中扩充到的,或者说转移中的每一种状态都对应有一个子集b,为其必须包括的子集,1.ac** 后面两种**是唯一确定的,如果要继续往外扩充则必须满足ac在其子集内。3.ac这种情况是不考虑的直接continue。2.**** 方案|s/2|我们先统计每个子集的dp值。考虑枚举中心点往外扩,
2023-11-24 22:46:07
43
1
原创 ICPC2021昆明补题
根据某平均定理可知,图上最大的连续ai平均值不会超过三个。所以在图上暴力去找两个/三个连续点的最大平均值就好了。此题难度主要在于化简公式和找到定理。题意:在树上找一段简单路径,使得。,即求最大的一段连续ai和。思路:化简得该公式为。
2023-11-01 21:42:10
45
原创 ICPC2022沈阳|I-Quartz Collection(权值线段树)
假设Alice全以第一次的价格购买n种宝石(显然这是不可能的),对于a[i]<=b[i]的宝石,Alice是赚的,否则Alice是亏的。双方开始轮流选宝石,一开始肯定是选最赚的(也就是(a[i]-b[i]为负数且越小越好))的第一次价格,并且根据赚的程度依次由ABBAABB...挑走。我们模拟一遍过程可知,假如赚的宝石数量为奇数,那么亏的宝石一定由Bob开始选第一个,并且根据亏的程度由BABABABA...挑走;选完所有赚的宝石,为了避免选到亏的宝石,Alice和Bob会回头去以第二次价格选对方选过的。
2023-10-29 20:50:53
98
1
原创 【算法笔记】数论基础
逆元定义:如果一个线性同余方程 ax≡1 (mod b) ,则称x为a mod b 的逆元,记作a^−1。相当于求不定方程 ax+by=1 的解 (只要求gcd(a,b)=1,不要求b是质数)由于q一定小于i,所以可以递推。ac代码:(简洁美观)
2023-10-14 19:24:05
43
1
原创 补题记录 | 10.4 waiting for 沈阳
题意:树图,有三种操作:操作1 在x点爆发w严重值,其他所有点受w-dis(i,x)的严重影响。操作2 x点严重值 与0 取min。操作3询问 x点严重值。从p状态转移到p+1状态,假设p状态我们已知到每一行和每一列的最小代价,我们去算p+1合法状态每一个点从每一行每一列转移来的代价并且更新。给定n*n的棋盘,每一个格有对应的值,玩家从1跳到k,每一步的代价是。做题时处理操作2出现问题,把pre+=w改成pre=w就过了...树链剖分+树上差分的操作。,问总的代价的最小值。
2023-10-05 20:52:06
41
原创 【算法笔记】字符串
给定一个字符串,m组询问给定p,q,要求s[1~p]和s[1~q]的最长公共前缀。首先要讲一个概念:Border:对于字符串S,用|S|表示其长度。那么S串的一个Border就是S的某个前缀(S串本身不算),这个前缀能和后缀匹配。举个例子,abcdabc的一个Border是abc。一个字符串的Border可能有多个。对于任意一个字符串S,一个Border的长度就对应一个Border(比如abcdabc的长度为3的Border当然就只能是abc)。并且,假设S长度记为n,则直到值为0的不算。
2023-08-12 17:43:31
126
1
原创 无价的错题本
错误: int s=ceil(50.0*(1.0*a[i]/(1.0*maxi)));正确: int s=(50ll*a[i]+maxi-1)/maxi;di范围0~43962200。
2023-05-03 17:44:16
32
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人