摘要: 原题链接 作为二分答案的入门题非常合适。 很典型的二分答案。但是这题有一个坑点,left的值不能设为0这种确定的值,而是应该设为这个数组的最大值。 这道题警示了我二分答案的一个重要前提:确定合理的二分区间。 题解 首先,判断单调性,对于一个最大值mid,如果能够满足check(),那么mid+1,m 阅读全文
posted @ 2024-02-09 23:09 黑屿白 阅读(22) 评论(0) 推荐(0)
摘要: 题解 假设 a1 a2 a3 ... ak ak+1 ak+2 ... an是符合要求的数组, 那么我们可以推断出: a(k+1)=a(1)+1; a(k+2)=a(2)-1; ... a(2k+1)=a(k+1)+1; ... 因此我们知晓奇数位的数要比较小,偶数的位置要比较大;又题目说明一定有解 阅读全文
posted @ 2024-02-09 22:06 黑屿白 阅读(28) 评论(0) 推荐(0)
摘要: 前言 拿到题目首先看数据量,n,q都是2e5的数量级,如果是暴力解的话时间复杂度会达到O(m*n)(最差情况 m次询问,每次l和r为1和n),很明显会超时。 这就意味着我们要在线性的时间内完成查询,即每次询问的查询时间保证在O(1)。 题解 准备一个数组b存储该连续相同数字串的起始点,然后我们从左向 阅读全文
posted @ 2024-02-09 21:56 黑屿白 阅读(34) 评论(0) 推荐(0)
摘要: 题解 我们只需要遍历1~k,这时会有四种情况: 1、只存于a数组中。 2、只存于b数组中。 3、同时存于ab数组中。 4、不存在于ab数组中。 对于情况三,这种数我们不需要去管,因为它可以算在任意的数组上。 那么我们只需要判断情况一和二的数是否都<=k/2,并且情况一二三的数总和为k. Code # 阅读全文
posted @ 2024-02-09 19:10 黑屿白 阅读(41) 评论(0) 推荐(0)
摘要: 题解 我们从左向右构建字符串。 每种数字我们都从a开始取,接下来我们用一个数组来存储对应数字下一次要取的字母。 Code #include<bits/stdc++.h> using namespace std; const int N=2e5+5; int b[N],a[N]; int main() 阅读全文
posted @ 2024-02-09 18:55 黑屿白 阅读(37) 评论(0) 推荐(0)