随笔分类 - 题解
摘要:题意 给定 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
阅读全文
摘要:题意 给定一个 nnn 个数的 排列 aaa,需要我们构造一张图,两点 i,j(i<j)i, j(i < j)i,j(i<j) 相连当且仅当 aia_iai 和 aja_jaj 为 ai,ai+1,⋯ ,ara_i, a_{i+1}, \cdots, a_rai,ai+1,⋯,ar 中的最
阅读全文
摘要:二分图染色好题。 一开始给定的是一个连通图。nnn 个点 n−1n - 1n−1 条边的连通图一定是一棵树,而一棵树不存在奇数环,显然是二分图。 既然是二分图,必然可以黑白染色。对于每一个白点,都可以和其他每一个黑点连边。全部连完之后总共有 c1×c2c1 \times c2c1×c2 条边,c1,
阅读全文
摘要:考虑优先队列广搜,第 kkk 次出队的即为答案。注意需要去重。复杂度 O(nklog(nk))O(nk \log (nk))O(nklog(nk)),开 O2 可过,注意不要使用 long long,会 MLE。 #include <iostream> #include <queue> #incl
阅读全文
摘要:题意 动态维护一个序列,判断序列是否有两个以上不同的元素以及两个及以上相同的元素。 解法 这题 SPOJ 给出来源是 ACM ICPC 2009–2010, NEERC, Northern Subregional Contest,但是难度并不大,显然 STL 做这道题很容易,这里提供一个平衡树的做法
阅读全文
摘要:题意 动态维护一个序列,支持插入删除和查询中位数,多测。 解法 可以对顶堆,也可以平衡树。提供平衡树做法。 显然用平衡树的话这题非常容易,只需要插入删除和按排名查找值,比模板还容易。 特别注意的是,需要注意中位数的排名是什么。 我通常会在平衡树建立时插入极大值和极小值,所以排名有些改变。 设目前有
阅读全文
摘要:有一种暴力,枚举全排列,然后暴力 dfs,复杂度是 O(n!⋅2n)O(n! \cdot 2^n)O(n!⋅2n)。撇开 long long 能不能存得下,这种做法显然超时。 显然,对于任意一种顺序而言,显然应该先做加法再做乘法。所以可以优化,枚举全排列后每次枚举一个位置作为加法和乘法的中断点,复杂
阅读全文
摘要:题意 题面描述十分清晰。 思路 CF 上有一个 tag 是搜索,但是尝试了许久,bfs 一直 WA,于是考虑 DP。 注意到范围 n≤107n \leq 10^7n≤107,显然考虑 O(n)O(n)O(n) 的线性 DP。可以设 fif_ifi 表示生成长度为 iii 的最小代价,显然: fi=
阅读全文
摘要:题意 一个 nnn 个元素的序列和一个双端队列,按顺序每次在前或后面插入每个 aia_iai,求出插入完成后最小逆序对数量。 解法 比较容易的贪心。 贪心,就是局部最优导致全局最优。显然,每次插入 aia_iai,计算在前面和后面插入造成的逆序对数量,取较小的累加即可。 手玩一下样例,发现是对的
阅读全文
摘要:题意 题目描述非常清晰。 思路 先考虑一个 O(n2)O(n^2)O(n2) 级别的算法,就是暴力枚举每个 aia_iai,并对其向两边扩展,最坏情况 O(n2)O(n^2)O(n2),但是在随机数据下跑得非常快。 想办法优化。 显然,我们发现枚举次数过多,所以考虑尽量少枚举一些。 对于每个 ai
阅读全文
摘要:题意 给定序列 aaa,以及两个数 c,tc,tc,t,求 ∑i=1n−c+1[(maxj=ii+c−1aj)≤t]\sum_{i=1}^{n-c+1} [(\max_{j=i}^{i+c-1} a_j) \leq t]∑i=1n−c+1[(maxj=ii+c−1aj)≤t],即有多少个长度
阅读全文
摘要:题意 给定 nnn 个数的序列 aaa,交换序列的任意两个数 kkk 次,求交换后最大子段和。 解法 考虑贪心。 因为 n≤200,k≤10n \leq 200, k \leq 10n≤200,k≤10,所以我们可以考虑平方级别的复杂度。 假设最终必须选区间 l,r(l≤r)l, r(l \leq
阅读全文
摘要:题意 带权值最长上升子序列。 解法 考虑 dp,和普通最长上升子序列一样,设 dpidp_idpi 表示以 iii 为结尾的最长上升子序列的权值和,则有 dpi=(maxj=1i−1{dpjhj<hi0hj≥hi)+hidp_i = (\max_{j=1}^{i-1} \begin{cases}
阅读全文
摘要:单点修改,区间询问,不难想到线段树。 所以我们把这个问题转化成另外一个问题,设 ( 符号表示 111,) 符号表示 −1-1−1。而 pip_ipi 表示这个括号序列的前缀和,那么显然,当这个序列是正确表达式,仅当对于所有 i(1≤i≤n)i(1 \le i \le n)i(1≤i≤n),都有 p
阅读全文
摘要:场外的题解。 这道题确实就是模拟,但是还是有一些细节要注意的。首先你要读懂题目,特别是要找出特殊情况的处理方法,例如: 6 #define p b #define c z #define CC p c CC #undef p CC 这个数据应该输出: b z p z 这个是需要注意的。 那具体如何模
阅读全文

浙公网安备 33010602011771号