随笔分类 - C - 分块
摘要:给定一个 n 个点的无向图,标号从 1 到 n。一开始没有任何边存在。
请你完成以下两种操作:
1 x y(1 <= x, y <= n, x ≠ y),将 (x, y) 这一条边置反。也就是,存在变为不存在,不存在变为存在。
2 x y(1 <= x, y <= n, x ≠ y),询问 x, y 是否连通。
注意操作是加密的。记 last 表示上一次 2 操作的结果(连通为 1,否则为 0),初始为 0。
则真实的询问编号 x', y' 应为 (x + last - 1) mod n + 1,(y + last - 1) mod n + 1。
阅读全文
摘要:有一棵有根树,根为 1,点有点权。
现在有 m 次操作,操作有 3 种:
1 x y w,将 x 到 y 的路径上的点点权加上 w (其中 w=±1);
2 x y,询问在 x 到 y 的路径上有多少个点点权 >0;
3 x,询问在 x 的子树里的点有多少个点点权 >0。
阅读全文
摘要:小 D 有 n 个 std::queue,他把它们编号为 1 到 n。
小 D 对每个队列有不同的喜爱程度,如果有他不怎么喜欢的队列占用了太大的内存,小 D 就会不开心。
具体地说,如果第 i 个队列的 size() 大于 ai,小 D 就会对这个队列一直执行 pop() 直到其 size() 小等于 ai……
阅读全文
摘要:JOHNKRAM 和 C_SUNSHINE 在玩一个游戏。
游戏规则如下:有若干堆石子,游戏前选定一个正整数 p,JOHNKRAM 先手,两个人轮流操作。定义一次操作是选择某一堆石子,然后拿出其中的 p^k(k∈N) 个石子扔掉,不能操作者输。
C_SUNSHINE 表示判定谁能赢太简单了,于是他放了 n 堆石子,编号为 1∼n。
他每次把编号在某个区间内的石子堆加上若干个石子,或者询问以编号在某个区间内的石子堆进行游戏,是谁胜利。
阅读全文
摘要:给定一棵 n 个点的树,树上每条边的长度都为 1 ,第 i 个点的权值为 a[i]。
Byteasar 会按照某个 1 到 n 的全排列 b 走 n-1 次,第 i 次他会从 b[i] 点走到 b[i+1] 点,并且这一次的步伐大小为 c[i]。
对于一次行走,假设起点为 x,终点为 y,步伐为 k,那么 Byteasar 会从 x 开始,每步往前走 k 步,如果最后不足 k 步就能到达 y,那么他会一步走到 y。
请帮助 Byteasar 统计出每一次行走时经过的所有点的权值和。
阅读全文
摘要:请你维护一个序列,支持两种操作:
(1)某个区间 [x, y] 内的数同时加上一个增量 k。
(2)询问某一个区间 [x, y] 中从 1 开始的最大前缀和。
阅读全文