Data Structure
P3586 [POI2015] LOG
题目
单点修改,询问每次选出 \(c\) 个正数,都减去 \(1\),能否进行 \(s\) 次操作。
每次询问独立。
题解
把 \(>s\) 的数看作 \(s\),每次询问总和是否 \(\ge sc\)。
P4113 [HEOI2012] 采花
题目
区间出现次数 \(\ge 2\) 的种类数。
题解
离线,按照右端点排序。扫描线扫描右端点,记录每种颜色最后出现的位置和倒数第二次出现的位置。
维护一个数组,每种颜色倒数第二次出现位置设为 \(1\),每次询问相当于区间求和。树状数组维护即可。
P5309 [Ynoi2011] 初始化
题目
区间求和,下标 \(y,y+x,y+2x,...,y+kx\) 加 \(z\)。\(y\le x\)。
题解
\(x > \sqrt n\)
直接加,记录每个块的和。
\(x \le \sqrt n\)
记录 \(pre_{x, i}\) 表示每个长度为 \(x\) 周期的前缀和。查询时枚举周期。
P3245 [HNOI2016] 大数
题目
给定一个数组串(可能有前导 \(0\))和一个素数 \(p\)。多次询问一个子串中有多少子串是 \(p\) 的倍数。
题解
\(p = 2\) 或 \(p = 5\)
暴力。
\(others\)
预处理每个后缀的值 \(h\)。
每次询问 \(\dfrac{h_i - h_{j + 1}}{10 ^ {j - i}} \equiv 0 \pmod p\) 的个数。
莫队维护即可。
P3979 遥远的国度
题目
给一棵树,有点权,\(3\) 种操作。换根,将 \(x,y\) 路径上的点权就改为 \(v\),询问子树最小值。
题解
\(rt = u\),整棵树最小值。
根在子树 \(u\) 外面,子树不变。
根在子树 \(u\) 里面,设 \(v\) 为 根在原树的祖先 且 是 \(u\) 儿子 的节点,询问的子树就是去掉 \(v\) 子树的所有点。
P5268 [SNOI2017] 一个简单的询问
题目
询问 \(\sum\limits_{x=0}^\infty \text{get}(l_1,r_1,x)\times \text{get}(l_2,r_2,x)\)。
$ \text{get}(l,r,x)$ 表示计算区间 \([l,r]\) 中,数字 \(x\) 出现了多少次。
题解
设 \(F(a, b, c, d)\) 为区间 \([a, b]\) 和区间 \([c, d]\) 的答案。
设 \(G(x, y)\) 为 \(F(1, x, 1, y)\)。
则 \(F(a, b, c, d) = G(c, d) - G(a - 1, d) - G(b, c - 1) + G(a - 1, c - 1)\)。
莫队统计答案即可。
P4689 [Ynoi2016] 这是我自己的发明
题目
一棵 \(n\) 个节点的树, \(m\) 次操作。
1 x
将根换为 \(x\)。
2 x y
从 \(x, y\) 子树中各选出一个点,求点权相等的情况数。
题解
P3979 + P5268。
把序列倍长,可以保证每个询问区间都是一段连续段。
P4688 [Ynoi2016] 掉进兔子洞
题目
有 \(n\) 个询问,每次询问三个区间,把三个区间中同时出现的数一个一个删掉,问最后三个区间剩下的数的个数和,询问独立。
题解
莫队套 btiset。
由于空间原因,把询问分组。
P3674 小清新人渣的本愿
题目
每次询问一个区间是否可以选出两个数的差或和或积为 \(x\)。两个数位置可以相同。
题解
莫队套 bitset。
设当前区间值的 bitset 为 \(s\),负数 \(+1e5\) 的 bitset 为 \(c\)。
差:s & (s >> x)
。
和:s & (c >> 1e5 - x)
。
积:枚举 \(x\) 的因子即可。
P5355 [Ynoi2017] 由乃的玉米田
题目
每次询问一个区间是否可以选出两个数的差或和或积或商为 \(x\)。两个数位置可以相同。
题解
商为 \(x\),设阈值为 \(S\)。
\(x \ge S\)
莫队套 bitset,枚举除数即可。
\(x < S\)
对于每个 \(x\),维护 \(l_i\) 表示在区间 \([1,i]\) 中,满足商为 \(x\) 的二元组的左端点的最右侧的位置。
P3793 由乃救爷爷
题目
随机数据静态区间最大值 \(2e7\)。
题解
分块,处理每个块前缀后缀最大值。对于每个块的最大值做 ST 表。
P6177 Count on a tree II
题目
一棵树,多次询问链上有多少个不同的整数。强制在线。
题解
树剖分块套 bitset。
P3603 雪辉
题目
给一个 \(n\) 个点的树,点有点权,有 \(m\) 次询问,每次询问多条链的并有多少种不同的点权以及它的 \(\text{mex}\)。
题解
树剖分块套 bitset。
s._Find_first()
找到第一个 \(1\) 的下标。
P6328 我是仙人掌
题目
给定无向图,每次询问给定一些二元组 \((x, y)\),有多少个点 \(u\) 与至少一个二元组满足 \(\text{dis}(u, x) \le y\)。若不连通,\(\text{dis} = \infty\)。
题解
bitset。
\(f_{x,i}\) 表示距离 \(x\) \(\le i\) 的点的集合。
P4135 作诗
P4168 [Violet] 蒲公英
CF916E Jamie and Tree
P6009 [USACO20JAN] Non-Decreasing Subsequences P
P6240 好吃的题目
P4396 [AHOI2013] 作业
P3730 曼哈顿交易
P3792 由乃与大母神原型和偶像崇拜