分块
WorldWide_D
这个作者很懒,什么都没留下…
展开
-
[bzoj4867] [Ynoi2017]舌尖上的由乃
题目大意给定一棵n个节点的树,边有边权。m个操作:1. 给一条边边权加k;2.询问一棵子树第k小的深度。 修改操作的k和最初的边权不超过一个给定的常数lenn,m≤100000 len≤10分析首先可以求出dfs序,转化到序列上。 用数据结构似乎无从下手,于是考虑分块。 首先查询是可以二分答案的,对于询问区间完全包含掉的块,预处理一个以权值为下标的数组的前缀和,可以O(1)查询。 那么对原创 2017-09-02 22:13:20 · 821 阅读 · 1 评论 -
[codeforces840E] In a Trap
题目大意有一个n个节点的有根树,边权为1,点权给定,第i个点的点权是ai。q次询问,每次给定u,v,并保证u是v的祖先。问对于u到v路径上的所有i(包括u,v),最大的ai xor dist(i,v)。其中dist(i,v)是i到v的距离n≤50000 0≤ai≤n q≤150000分析这题的做法很有趣。 我们把v到u的路径每256个节点分成一段(最后一段可能不够256个,可以单独枚举原创 2017-12-27 15:13:23 · 633 阅读 · 0 评论 -
[codeforces896E] Welcome home, Chtholly
题目大意给定一个n个数的序列。m次操作:1. 给区间[l,r]中所有大于x的数减x 2. 询问区间[l,r]中数值为x的数个数。n,m≤100000 1≤a[i],x≤100000分析这题?循环展开然后optimize一下就过了这是由乃题,我们应该考虑分块。值域范围比较小,我们可以直接记录cnt[i][j]表示块i中数值为j的数个数。 然后再用并查集把同一块中数值相同的元素缩在一起。 对于原创 2018-01-19 20:31:10 · 619 阅读 · 0 评论