07 2022 档案
摘要:考虑并查集维护。 我们设 1∼n1 \sim n1∼n 维护同义词并查集,n+1∼2nn + 1 \sim 2nn+1∼2n 维护反义词并查集。 每次合并只需要判断是否和这次给出的情况不一样即可。 询问时与合并类似,判断同义或反义。
阅读全文
摘要:题意 给定序列 aaa,多次询问区间里 >k>k>k 的数的个数,强制在线。 做法 先考虑弱化版,离线算法。离线可以考虑莫队加值域分块,复杂度是 O(mn)O(m \sqrt n)O(mn)。 由于强制在线,这种做法不可行。一种做法是可持久化线段树,另一种是分块。 可以考虑块内二分,每个块 upp
阅读全文
摘要:题意 给定三个序列,长度分别为 x,y,zx, y, zx,y,z,你需要在三个序列里每个序列选一个数求和,有 x⋅y⋅zx \cdot y \cdot zx⋅y⋅z 种和,求从大到小前 kkk 个和。 解法 最暴力的做法是枚举每一种和,然后排序求前 kkk 个,复杂度 O(xyzlog(xyz)
阅读全文
摘要:题意 共 ttt 组数据,每组给定一个字符串 sss,包括 (, ) 和 ?。你可以进行无限次操作,每次把一个 ? 换成一个 ( 或者一个 )。问是否有多种方法可以将这个字符串变为一个正确的括号序列。 解法 考虑贪心。 对于每一个字符串,我们不妨先找到其中一个正确的括号序列。假设最初这个字符串长度为
阅读全文
摘要:考虑二分图匹配。 对每一个教室和这个教室可以上课的学生连边,显然这是一个二分图,左部是教室,右部是学生。求一下最大匹配 xxx,若 x=mx= mx=m,即 mmm 个教室都可以有学生,那么答案为 YES,不然答案为 NO。 代码: #include <iostream> #include <cst
阅读全文
摘要:题意 给定 nnn 个数的序列 a1,a2,⋯ ,ana_1, a_2, \cdots, a_na1,a2,⋯,an。mmm 次询问,每次询问给定两个数 l,rl, rl,r,需要输出 {∑i=lr−1max{0,ai−ai+1}l≤r∑i=rl−1max{0,ai+1−ai}r<l\be
阅读全文
摘要:题意 给定正整数 nnn,求小于等于 nnn 且最大的是 10x10^x10x 的正整数 yyy,满足 x∈Nx \in \mathbb Nx∈N。输出 n−yn - yn−y。多组数据。 做法 显然可以暴力枚举。由于 1≤n≤1091 \leq n \leq 10^91≤n≤109,所以每次枚举
阅读全文
摘要:题意 给定 nnn 个数 a1,a2,⋯ ,ana_1, a_2, \cdots, a_na1,a2,⋯,an,mmm 次询问,每次询问给定 x,yx, yx,y,问这 nnn 个数里是否有两个数 i,ji, ji,j,满足 1≤i≤j≤n1 \leq i \leq j \leq n1≤i≤j
阅读全文
摘要:做法 较为简单的贪心。 先考虑不存在特殊权力,即每次都是大牌获胜。假设这次对方出的是 aia_iai。分情况讨论: 若 aia_iai 是还没有打出的牌中的最大值,显然我方无论如何都无法得到这局的分,因此打出最小的牌。 若 aia_iai 不是最大值,则一定可以出一张牌赢得这一局,显然最优方案
阅读全文
摘要:做法 考虑二分答案,显然要二分完成所有任务的时间。 对于完成所有任务的时间 xxx,如何判断在 xxx 分钟内,所有任务可以做完呢?显然对于每一个工人所熟练的任务都有若干个,假设第 iii 个工人所熟练的任务有 cic_ici 个,对于 ci<xc_i < xci<x,第 iii 个工人做完之后
阅读全文
摘要:分块经典题。 这种题显然是数据结构,1≤n≤1051 \leq n \leq 10^51≤n≤105,考虑根号复杂度做法。于是考虑使用分块。 我们先预处理出两个值:resi,j,cnti,jres_{i, j}, cnt_{i, j}resi,j,cnti,j,resi,jres_{i,j}re
阅读全文