树状数组
文章平均质量分 52
timidcatt
永远不要放弃战斗
展开
-
J. Joy of Handcraft 2020 China Collegiate Programming Contest - Mianyang Site
思路:对于一盏灯,它打开的时间段是[1,a[i]]、[2*a[i]+1,3*a[i]]...,对于m的时间内,每盏灯最多有m/a[i]/2个区间,我们对于每一个a[i],只保留一个最大的亮度值,这样最多1e5个a[i],枚举区间的复杂度是O(n*logm),然后用线段树维护最大值时间复杂度O(n*logm*logm)题目大意:有n盏灯和m秒,每盏灯会开a[i]秒然后关a[i]秒然后再开a[i]秒,依次循环,灯打开后,就会产生b[i]的亮度值,问m秒内每一秒最大的亮度值是多少。原创 2023-11-13 08:33:07 · 115 阅读 · 0 评论 -
H. HEX-A-GONE Trails 2023“钉耙编程”中国大学生算法设计超级联赛(7)hdu7354
然后我们还要求从关键路径上每个点出发的所有链的长度,每移动一个节点,所有从起点出发的链的长度都要-1,但其实可以数学一下,我们求出两个起点出发所有链的长度d1,d2,然后假如A从起点移动了一格,到了编号为i1的点,那么再判断时我们只需要判断dis[i1]+1与从B的起点出发所有链的长度即可,省去了全部-1的操作,我们用st表求最大值即可。我们按照此策略循环,看谁先找到最优策略,或者两个人汇合时,谁不能继续走。从2出发的所有链,就能必胜,此图已不存在此情况。原创 2023-08-08 20:59:06 · 263 阅读 · 3 评论 -
F. Range Update Point Query codeforces 1791F
思路:区间修改+单点查询问题,用树状数组的时间复杂度常数比线段树低一些,本题用线段树会被卡TLE。所以我们用差分树状数组,这样的话查询tree[i]的值就等于求i及其之前的数的前缀和,区间修改也只要修改tree[l]++和tree[r-1]--即可。题目大意:有一长度为n的数组a,有两种操作,有q次操作,操作1可以将a[l]和a[r]之间的数字变成a[i]的数位和,操作2求a[i]的值。原创 2023-02-04 14:53:27 · 611 阅读 · 0 评论 -
CCPC2022桂林 M. Youth Finale (gym104008M)
对于S操作,将第一个数移到最后之后,逆序对的数量就要减去原来第一个数的逆序对的数量,和将其移到最后以后正序对的数量,所以新的逆序对的数量就等于原逆序对的数量sum-(2*操作前第一个数a[fi]-1-n),如果当前没有倒置过,新的fi就等于fi+1,反之等于fi-1。对于R操作,反转后的逆序对数量就等于原数组的正序对的数量,又因为正序对数量+逆序对数量就等于n*(n-1)/2,所以sum=n*(n-1)/2-sum,如果没有倒置过(或者之前倒置的次数为偶数),fi就等于fi-1,反之等于fi+1。原创 2022-11-01 16:14:28 · 561 阅读 · 0 评论