摘要:
原题链接 作为二分答案的入门题非常合适。 很典型的二分答案。但是这题有一个坑点,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
黑屿白
阅读(27)
评论(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)
浙公网安备 33010602011771号