摘要:
题意 给定 \(n\) 个护符,每个护符有一个权值 \(a_i\),进行 \(k\) 次操作,每次选择一个护符,并获得护符的权值。 给定 \(q\) 个限制,表示在第 \(i\) 次调整必须调整前 \(x\) 个护符或在第 \(j\) 次调整时调整后 \(y\) 个护符。 求最小权值。 Sol 最小 阅读全文
摘要:
题意 给定一棵 \(n\) 个节点的一棵树,初始时 \(1\) 号点为红色,其余为蓝色。 要求支持以下操作: 将一个节点变为红色。 询问节点 \(u\) 到最近红色节点的距离 共 \(q\) 次操作。 Sol 喵喵题。 不难想到点分树做法,不再阐述。 考虑简单的操作分块。 对于块外,可以考虑每做完一 阅读全文
摘要:
题意 维护一个序列: 区间查询 区间赋值 区间加法 区间复制 区间交换 区间翻转 数据随机。 Sol 珂朵莉。 前 \(3\) 个操作很 \(trivial\)。 考虑区间复制。 先把两个区间 \(split\) 出来。 然后扔进 \(vector\),全部 \(erase\) 掉。再用 \(vec 阅读全文
摘要:
题意 给定一个序列。 每次询问求两个区间排序后是否只有一个或者没有位置不同。 Sol 不难想到主席树维护值域。 考虑如何判断。 注意到当前答案正确,当且仅当值域上两点不同且相邻。 维护每个点的哈希值判断即可。 Code #include <iostream> #include <algorithm> 阅读全文
摘要:
题意 给定一个矩阵,你需要支持: 循环左移 循环右移 循环下移 循环上移 按行置换求逆 按列置换求逆 Sol 前 \(4\) 个操作是 \(trivial\) 的。 如何处理后两个操作? 考虑设一个三元组:\((x, y, A_{xy})\)。 每次操作,对于每一个元素都能确定操作后另外某个元素。 阅读全文
摘要:
题意 给定一个长度为 \(n\) 的序列。 每个数字的范围为 \([1, m]\)。 求一共 \(m ^ n\) 种数列,每个数列种本质不同的子序列个数之和。 Sol 考虑用一种比较好的方式表示答案。 枚举本质不同的子序列长度,枚举中间跳过的数的个数。 \[m ^ n + \sum_{i = 1} 阅读全文
摘要:
题意 给定一个数列。每个数字有一个颜色。 单点修改数字,区间修改颜色。 求: 包含所有颜色的数字和最小的区间 没有重复颜色的数字和最大的区间 数据随机。 Sol 数据随机,直接上珂朵莉树。 跑双指针的时候套个线段树求最大最小区间和就行。 Code #include <iostream> #inclu 阅读全文
摘要:
题意 给你一张无向图。 你可以添加若干条边,然后给所有边定向。 使得每一个点的出入度为偶数。 Sol 出入度为偶数,显然为欧拉环路的充要条件。 考虑对于所有原图度数为奇数的点两两相连。 如果不满足边数为偶数直接连自环即可。 跑一边欧拉环路,对于相邻两条边反向连就行了。 Code #include < 阅读全文
摘要:
题意 给定每列有多少个方块 \(h_i\)。 每次炸掉边缘的方块。 问你几次能把所有方块炸完。 Sol *1600 竟然还开了题解,该退役了。 发现每个方块只会有三种情况影响时间。 设每列的最短时间为 \(v_i\)。 \(h_i\) \(v_{i - 1} + 1\) \(v_{i + 1} + 阅读全文
摘要:
题意 给定 \(n\) 个数。 求最长的子段使得子段内有两个众数。 Sol 考虑全局众数对于子段的众数的影响。 注意到对于答案有贡献的子段一定包含全局众数,读者自证不难。 考虑对于每个数出现的次数根号分治。 对于出现次数大于根号的数: 种类不超过根号。 考虑暴力对于每一种数,考虑她成为众数的情况。 阅读全文