- 博客(127)
- 收藏
- 关注
原创 P3924 康娜的线段树
因为答案是整数,我们乘一个2^20即可(2^20==1e6)处理出每个点的深度就可以知道未修改的答案。因此我们只需要维护一个前缀和就可以了。考虑区间修改后对答案的影响。
2024-10-21 20:13:31 216
原创 P4240 毒瘤之神的考验
k=47-500 都能过 还#define int long long 了!发现上式1-1 上下两边乘gcd(i,j)有。这个时候我们可以把一部分看出一个整体。分析这两个函数,发现f(x) 可以在。2.>t 处理过的整块算 整除分块。经典代换T=ke e=T/k。把两个函数带入2-7可以得到。1.<=t预处理 暴力。g(x,y)有以下递推式。回答 MLE+TLE。整除分块得到部分答案。
2024-10-04 22:50:40 248
原创 P2464 [SDOI2008] 郁闷的小 J
考虑给每个编号开一个版本,维护区间和,于是想到主席树,N<=1e5 ,离散化即可。注意把操作离线下来的编码也要离散化。
2024-10-04 00:15:13 248
原创 选读算法导论5.2 指示器随机变量
2.注意随机变量指示器怎么用,实际上就是将求一个随机变量的期望,分解到一个个具体的事件,每一个小事件的期望往往容易求,所有小事件的期望加起来就是总得期望。单个事件选择i节点可以直接删除树,因为选了祖先节点就不会选i节点了,因此我们选i节点要比祖先节点先选,这个概率是。也就是说,删除 11 号结点后游戏即结束。1.指示器随机变量将所求的随机变量X分解成了许多单个的事件,对于每一个事件一一的求期望,加起来即可。给定n,求所有[1,n]排列中逆序对个数的平均值,以分数形式输出。对于每一次操作,等概率的选择一个。
2024-09-28 20:02:16 595
原创 E. Sheep Eat Wolves
dp[N][N][2]第一维是羊的数量,第二维是狼的数量,第三维是从左边到右,还是从右边到左边,最后完成任务的状态是min(dp[0][?][1]) 最后一次必然把牧羊人在右边。赛时队友想贪心,贪不了一点,我想了数学办法每次都送固定的发现送过去就不满足了。暴力写,去除一些不合法状态,状态转移就好了。考虑最短路,bfs,用数组存下所有状态。至少要几次才能把安全所有羊送到对岸去。牧羊人在左边,牧羊人在右边。赛后补,暴力做O(n4)记录的是左岸的动物状态。
2024-09-01 15:42:32 243
原创 [ABC368G] Add and Multiply Queries
用set or vector 记录b[i]>1的位置,二分找到就可以做区间和了。也就是说需要判断的地方最多60个,其他地方可以用区间和优化。但是发现查询答案保证在1e18以下 2^60。2个单点,一个询问,感觉询问只能O(n)做。也就是说b[i]>1最多60个。
2024-09-01 13:44:51 266
原创 P1505 [国家集训队] 旅游
中午12->下午3,因此,中午该吃饭,吃饭,写什么破题,后面码都没仔细看了。一开始wa,看到标记没下传,后面wa,调了3个点,发现是边权赋值错误。相反数,本来想维护相反数的,发现好像直接变相反数就好了。取反后,最大值变成最小值,最小值变成最大值。可以写结构体函数,一个query解决问题。维护如果写3个query ,就比较麻烦。
2024-08-28 15:11:10 538
原创 P4281 [AHOI2008] 紧急集合 / 聚会
于是思考如果存在2个lca是一样的就不应该在那边聚集,如果在那边聚集就会有至少2个人要走重复的路。因此如果有2个lca一样就选不一样的,3个一样就lca(x,y,z)树上三个点的路径上找一个点,聚集到一起,经过的边权值和最小。也可以知道2是3,6的lca,就想把每个lca都做一遍。看起来2是最完美的,不会走重复的路线。看样例以为是到比较3个点就可以了。后面发现3个点lca最多就2个。然后能a,就是很复杂的式子。但是都是要枚举3个lca。写完发现询问2错误了。
2024-08-25 17:47:35 268
原创 C. Propagating tree
因此我们维护奇数点的标记,如果点是奇数就+val,否者就-val。查询的时候奇数点直接+a[u],偶数点相反再+a[u]我们可以发现奇数和偶数的标记是相反的。因为是单点查询,操作一是+-+-偶数 +-+, -+-奇数 +-+-, -+-+
2024-08-24 15:09:42 306
原创 D. Beard Graph
注意特判如果两个点一样是0,如果dfn[u]+1>dfn[v]就不用询问了直接返回。我们维护ok标记,val值,黑(1),白(0)后面都是简单的线段树维护。
2024-08-22 17:54:55 225
原创 E. Linear Kingdom Races
思考枚举就是val(j)-cost(j)+dp(j) 因此我们可以直接维护这些值。dp(i)=max(dp(j)+val(j)-cost(j))选这i条路。求区间max(0,i-1) 从(i-1)内转移到 i。(0-i-1)减去(a(i))建立这条路需要的钱。线段树优化dp O(n2)->O(nlogn)dp(i)=dp(i-1)不选第i条路。显然右边值可以用线段树优化,不需要枚举。dp(i)是前i条路最大利润。枚举建立前i条路可以获利的。分析题意发现可以有暴力dp。
2024-08-22 15:18:33 424
原创 D. Sum of Medians
因此pushup魔改成 seg[id].val[i]=seg[tl(id].val[i]+seg[tr(id)].val[(i-l.sz+mod)%mod]发现最后的合并并不是 seg[id].val[1]=seg[tl(id)].val[1]+seg[tr(id)].val[1]而是 seg[id].val[1]=seg[tl(id].val[1]+seg[tr(id)].val[(1-2+5)%5]发现不止要维护val[3],val[3]也可以由其他val[i] i<5 转移来,维护vall[0-4]
2024-08-22 15:07:59 291
原创 F. One Occurrence
我们维护上一个相同值的位置,维护区间最小值,如果最小值小于l,就有说明有[l,r]有一个值的数量是1。为了防止第一个出现的值影响答案,我们还要把第一个出现的值修改成INF(原本是0)感觉可以用莫队草过去但是我不会写常数小的莫队+值域分块。因为每个数有可能修改2次,把N要再开大2倍。很像HH的项链,维护上一个相同的值的位置。看看tle 莫队code。接下来是ac的主席树。这样就可以在线操作完。
2024-08-19 13:22:48 195
原创 F. Please, another Queries on Array?
我们考虑优化质数状态,通过筛法得知300以内有62个质数,可以状态压缩到一个long long 数的二进制位上,如果超过ll,可以开bitset空间优化成 (n/32)在计算的结果的时候要求逆元,对与mod数较大(mod>1e7) O(logb)的,我们可以线性求逆元。因此我们维护300以内的质数的状态,以及区间乘积,懒标记(乘法标记,标记值x的质因数有哪些)操作一,懒标记乘300以内的数,维护ai也是300以内的数。因此我们只要维护300以内的质数的状态就可以了。操作二,维护区间乘积的值的欧拉值。
2024-08-18 15:44:30 216
原创 P2894 [USACO08FEB] Hotel G
多一个懒标记就可以了,但是维护范围是1,n,div3 H 是无限值域来找最小位置。找到的条件是seg[1].tmx>=v 否则就是0。很最近的div3 H 很像。
2024-08-17 15:38:12 129
原创 H. Ksyusha and the Loaded Set
存在的就是1,不存在的就是0,询问就转化为长度为大于等于k的全0子段输出最左边的索引。我们开4e6维护每个数字是否存在,ai=2e6时候k=2e6,最大是4e6。似乎可以直接开一个线段树来表示是否存在集合当中。看了一下数据范围ai<=2e6,k<=2e6。再二分,考虑左子树和右子树可以合并的情况。用集合模拟样例的操作,最后取消之前的影响。一开始看就感觉要维护一些比较有趣的量。我们考虑每次完成样例取消之前的影响。实际上从左到右找就可以线段树二分。我们维护最长全0子段长度即可。然后每次建4e6会tle。
2024-08-17 14:22:38 254
原创 E. Lucky Queries
元素值只有4,7转换成01序列,操作一区间反转,操作二询问类LIS。线段树维护量,是通过左子树和右子树的信息合并来维护的。可以发现可以通过Leftcnt0+Right类LIS。然后我们把一边是全是0,一边全是1的情况也考虑进去了。Left类LDS+RIghtcnt0。Leftcnt1+Right类LDS。于是取反的时候,LDS和LIS要交换。这样我们把这二种情况取max即可。显然,1的数量和0的数量要交换。于是我们又需要维护类LDS。到此维护量的操作就解释完了。维护的量需要有所变化。类LIS->类LDS。
2024-08-15 20:10:48 203
原创 F.Enchanted
沿着第一个操作思路以及例子,k=3,(1101)+(100)->(10001),发现高位的1,1都向前进了,比k低位的1不会有贡献,我们就可以模拟这个操作,计算贡献。)就可以转化成二进制,(1021)->(1101),找最高位1的位置即可,__lg函数得到答案。举个例子,[1,2,2,4]->[1,3,4]最大是4, 我们模拟二进制运算,我们维护(后面两种操作,一看就是可持久化线段树,单点修改,版本复制。两个相同的合成一个新的(3+3->4),感觉是二进制,看了一下前面两种操作,做法不是很明显。
2024-08-14 23:46:09 270
原创 I. 对线
接下来分析每个操作的转移矩阵 (可以通过关系式推导或者随意设置一个转移矩阵,计算后看是否满足关系式),也就是说这个操作可以累加的,因此不是给矩阵这个位置赋值1,而是++一次(!建议不要写结构体,加快读,对矩阵乘法进行优化,以及懒标记的下传判断优化。发现可以通过矩阵来实现swap操作,就想能不能用线段树维护矩阵来写。有三排兵线,我们维护区间和,因此初始矩阵就有了。在这个矩阵的基础下,swap(1,2)有。在这个矩阵的基础下,1要得到3的分身有。勉强卡过,结构体比较美观()虽然12s,但是我还是要卡。
2024-08-11 20:38:55 199
原创 B. Interesting Array
主要是分析 & 的操作,& 实际是取交集,因此,我们如果要满足条件,就应该区间|,| 实际是取并集,我们满足每个条件,也就是区间 | 操作,然后再查询一遍是否都满足即可。线段树维护区间&,区间 | 操作。
2024-08-11 02:21:20 150
原创 J. 二进制与、平方和
1&0=0 ,0&1=0,ai<=qmi(2,24),说明每个数最多操作25次。维护区间或和,orsum & x== orsum 就不用递归下去了。
2024-08-08 17:30:59 180
原创 A. Array
但是考虑结果都要mod p,所以数都在0-p之间。其实就是i-> (操作)%p的映射。那就不用维护别的标记量了,直接映射。mi操作快速幂+拓展欧拉定理。可以建立30颗线段树维护。三.mi 好像不能找到。维护值的映射位置,懒标记。于是懒标记貌似不能做,答案可以是每个值的贡献。维护值的数量,开一个桶。
2024-08-07 19:11:38 165
原创 Sequence
找到小于a[x]的第一个位置(1,x-1) L。找到小于a[x]的第一个位置(x+1,n) R。有单调性,范围越大,最小值越小,因此可以二分。可以把二分放到线段树里,时间复杂度。
2024-08-06 10:22:54 370
原创 G - Smaller Sum
3.分块维护区间和以及有序,散块暴力,整块二分找位置。求区间内小于等于x的值之和。好写维护一下区间和就好了。1.动态开点+主席树。
2024-08-06 01:05:46 220
原创 Easy DP Problem
话说给我了一个式子,我直接转不就好了,发现n<1e5,那算了。给一个dp转移式子,求dp[m][k] m=r-l+1。前面式子用循环求或者公式,后面维护区间前k之和即可。记得io优化,开ll,还有多组样例,主席树清空。
2024-08-05 16:43:57 162
原创 B. Bin Packing Problem
分析一下,从左到右,线段树二分,如果左子树最大值可以装下物品就往左边递归,不行就往右边,递归终点必然是一个位置,标记这个位置的背包被用过了,因为a[i]<c 所以sum<=n*c,开(1-n)的线段树即可。找到最小且要能装下,我们维护一个单调增的背包顺序,然后二分能装下的位置,如果在背包最后面就是没有能满足的增加一个背包即可,stl中map是有序的,用map存储再加上map二分即可。2.找到最小且可以装下的背包,没有就加一个背包。1.从左到右放,如果都不满足就加一个背包。给定n个物品,一种背包(容量c)
2024-08-04 22:12:16 143
原创 M.Upanishad
因为偶数次数xor后值为0,奇数次数值进行计算后值为0,偶数在xor出来就是ans。分析一下,ans=区间异或和 xor 出现的值的异或和。也就是去维护有多少种不同的值(HH的项链)于是我们考虑怎么维护出现的值异或和。求区间出现次数为偶数的值的异或和。其实是HH的项链魔改版。
2024-08-03 17:11:48 241
原创 Just Pour the Water
分析样例转移矩阵有,给哪个容器倒水就赋值1/k,没有倒水给自己赋值1。操作重复,考虑矩阵快速幂转换即可。有转移矩阵,初始矩阵。
2024-08-01 16:53:19 203
原创 Bus Number
这个好算,但是好像多了一点数,因为不能有前导零,所以我们要减去有前导零的部分。假想一下,如果我们知道m序列的长度是不是可以计算数量。那么我们只需要枚举数量即可,考虑数据范围(0-9)dfs一下,枚举每一次的(0-9)的数量即可。
2024-07-31 02:32:08 186
原创 Count the Arrays
三.选择的元素位置可以在左边也可以在右边,我们确定了最大的在中间,相同的在左右两边,因此有n-3个元素是不确定的,二.存在一个峰,所以选择元素值应该是排除最大的那个。4.仅存在一个峰 (ai<ai+1>ai+2)一. 应该是m中选n-1个 即。3.仅存在一对索引,元素相同。2.元素范围(1-m)
2024-07-31 02:23:02 316
原创 Beautiful Numbers
就是数位上的是好数,然后数位求和后的数,数位上也得是好数。得到x个a,(n-x)个b可以组合成极好数,组合方法数有。考虑n<=1e6,枚举x,找到符合条件的sum。
2024-07-31 02:15:45 357
原创 The World is a Theatre
组合一个t个人的队伍,队伍中至少要有4个男生,1个女生。考虑枚举队里女生的数量。有n个男生,m个女生。
2024-07-31 02:07:17 161
原创 Makes And The Product
显然我们要排序,我们就确认了最小值是现在的a1*a2*a3。求三元组(i,j,k)满足 ai*aj*ak是最小的数量。接下来,思考a1,a2,a3可不可以替换。就需要考虑a1,a2,a3之间的关系。找到一直满足a3==ai 的最大索引。找到一直满足a3==ai 的最大索引。找到一直满足a3==ai 的最大索引。a2,a3都可以替换。
2024-07-31 02:01:40 236
原创 P4139 上帝与集合的正确用法
确定递归终点phi(p)==1 return 0 剩余值Z,Z%phi(1)+phi(1)=0;我们从上面处理,处理到大于phi(p),用定理。X>phi(p),上面的数。之后我们就可以接着处理Y。用扩展欧拉定理处理式子。
2024-07-29 23:24:37 158
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人