
分块
bestFy
世界上最最最渣的oier.
展开
-
bzoj2741: 【FOTILE模拟赛】L
题面在这里题意:给一个数列,然后m个询问,每次询问一个区间[l,r]内异或值最大的数对,输出它们的异或值。做法:分块+可持久化trie。我们可以在log复杂度内求出,一个区间内任意一个数和一个定值的最大异或值。 可以用可持久化trie维护。 但是现在两个数都是不定的。考虑分块,f[i][j]表示第i个块左端点到j这段区间的数对的最大异或值。 则递推式为f[i][j] = max(f[i][j-原创 2017-12-28 17:34:53 · 308 阅读 · 0 评论 -
CC MONSTER Killing Monsters
题面在这里 题意: 游戏中初始时有n只怪兽排成一排,从左到右编号为0~n?1。第i只怪兽的初始血量为hi,当怪兽的血量小于等于0时,这只怪兽就挂了。 大厨要进行q次操作。每次操作中,大厨会选择两个整数x和y,并向下标k满足k&x=k的怪兽开炮(此处&代表按位与操作)。被炮弹打到的怪兽会掉y点血。 请告诉大厨,在他每次操作后,还有多少怪兽活着。 做法: 考虑分块。 把q次操作分原创 2018-01-18 12:35:18 · 552 阅读 · 2 评论 -
hackerrank Week of Code 34 Path Statistics
题面在这里 题意: 给一棵树,点上有点权,每次询问u,v,k,表示询问u-v路径上出现次数第k多的点权,如果次数一样则点权越小当做次数越多。 做法: 首先肯定要树上莫队。 然后我们考虑怎么求出现次数的第k小。 发现我们要求的其实是一个二元组(次数,点权)的第k小。 于是可以考虑在这个序列上分块。 预处理出这个二元组排完序后的编号,然后分成根号块。 记录一个bsum[i]表原创 2018-01-20 22:17:46 · 310 阅读 · 0 评论