自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(94)
  • 收藏
  • 关注

原创 ABC 373 F - Knapsack with Diminishing Values

一道很神奇的dp题。令g[i][j]为拿重量为i的物品,拿j个的时候的幸福度,f[i][j]为拿重量小于i的物品,总重小于j的情况下的幸福度。观察可以知道,幸福度的方程是二次函数,如果多拿一个物品,那么就会多价值-2-1的幸福度,那么就可以先求出g数组的值,然后求f数组就可以得到答案。给n个物品,每个物品有二种属性,第一种为重量,第二种为价值,每个物品有无限个,最多拿总重不多于W的物品,每种物品提供的幸福值是价值*拿的数量-拿的数量*拿的数量。

2024-10-03 21:54:05 53

原创 CF C. Nikita and LCM

思维题.首先先对数组排序,考虑一种特殊情况,那就是如果数组最大值不能被其他数整除,这代表什么?代表其他数里面有某个质因子,最大值里面没有或者数量不管,所有最小公倍数都会大于最大值.那么其他情况的话,就可以确定所有的数都是最大数的因子,那么形成的最小公倍数也一定是最大数的因子,那么就可以枚举一下最大数的因子,就可以了.给长度为n的数组,求出最长的特殊子数组,如果子数组的最小公倍数不在原数组中,那么就是特殊的.

2024-09-13 17:43:09 367

原创 牛客周赛 小红的数组回文值

最暴力的思路是枚举出全部的子序列,然后暴力的计算回文值,但是明显会超时。从算贡献的角度来思考,对于每一对不相同的元素可以计算出这一对对全部子序列的贡献,例如说 i,j这二个位置不相同,如果它们在同一个子序列里面,就是在[1,i-1]和[j+1,n],这二个区间里面选择相同数量的数,再在[i+1,j-1]这个区间里面随便的取数,那么就可以的到答案的组合数公式。给长度为n的数组,求这个数组的任意子序列的回文值总和,回文值定义为一个子序列应该元素相同,但是不相同的位置数量。,根据范德蒙恒等式的性质,

2024-09-10 11:04:19 305

原创 CF D. Shocking Arrangement

将正数放入一个数组,负数放入一个数组,正数按照从大到小排列,负数按照从小到大排列,使用sum记录前缀和,如果前缀和大于0,那么就放入小于0的数,如果小于0,那么就放入大于0的数。为什么这样一定是正确的,这样排列的情况下,前缀和一定是贴近0的,对于任意一段区间的区间和来说,都可以转换为区间和的差,所以如果从0开始的区间和都符合条件,那么其他情况也符合条件。多测,每次给出长度为n的数组,可以任意排列这个数组,问能否让绝对值最大的区间和小于数组最大值减去最小值。

2024-09-10 10:48:08 205

原创 ABC 370 E - Avoid K Partition

j是从1到i-1,然后如果从j到i这一段的总和是k,那么就减去f[j],对于任意的f[i]来说,这样是不重不漏的,那么可以很容易写出一个n*2的算法,可以观察到,这个算法的瓶颈是在减去j到i总和是k的这一步上,从前缀和的角度考虑,对于每个从j到i总和为k来说,从1到j的总和都是一样的值,那么就可以用map来记录一下,从1到j总和为键,从1到j的划分方法为值,这样时间复杂度就可以了。给长度为n的数组,将数组划分成任意份,但是每一份的总和都不能是k,问有多少种分割方法。

2024-09-09 21:03:09 360

原创 牛客周赛 59 小红的X型矩阵

会形成(n-1)*(n-1)种不同形态的矩阵,这些矩阵如果是依次枚举出来,时间复杂度和空间复杂度都要上天。经过观察可以发现如果将n*n的矩阵拓展成2n*2n的矩阵,那么这个矩阵里面的n*n的小矩阵会形成(n-1)*(n-1)种不同形态的矩阵。那么就可以让矩阵循环展开成2n*2n的矩阵,那么就相当于给你一个n*n的矩阵,每次可以让一个元素改变,问变成x矩阵的最小次数,就可以直接用前缀和来解决了。问至少几次操作二可以让矩阵变成x矩阵,x矩阵的定义是对角线上都是1,其余都是0。

2024-09-09 20:34:27 345

原创 CF C. Candy Store

因为每一袋糖果的价格都是由数量和单价相乘构成的,所以cost%单价=0,所以cost是这一段单价的最小公倍数。所以一段糖果可以使用一个标签,那么每种糖果的总价是数量×单价,总价%cost=0,这就意味着,这一段的最小公约数%cost=0。多测,先给出n代表n种糖果,每种糖果分别给出数量和单价,可以将糖果平均分成若干袋,每一袋的的价格是一袋糖果数量×单价,对于每一种糖果都求出一袋的价格,对于每种糖果都需要用标签贴出一袋的价格,但是如果相邻的糖果价格相同,那么就可以用一个标签来代表价格,问最少使用几个标签。

2024-08-31 18:18:12 275

原创 ABC 368 G - Add and Multiply Queries

可以使用链表来维护,链表的含义是当前位置的b数组值大于等于2的下一个大于等于2的位置,这样的话,就可以先找到[l,r]区间里面第一个大于等于2的位置,然后不断的往后面跳跃,直到大于r。因为初始值是0,所以第一次操纵一定是选择a[l],从l+1开始到b数组里面第一次出现大于等于2的数之间,肯定是之间加上a数组里面的数更加优秀,那么这一段区间的和怎么维护呢?对于操作二来说,因为是用链表来写的,所以如果改变的值大于等于2,那么就把改变的位置加入链表,如果小于2,并且b数组这个位置大于2,那么就把这个节点舍弃。

2024-08-26 17:56:48 333

原创 CF E. Best Pair

观察可以知道所有的cnt总和是n,不同种类的cnt数量不会超过sqrt(n)的范围,那么就可以双重循环枚举cnt,时间复杂度为O(n),如果cnt确定了,那么对于i和j来说一定是取最大的时候最优的,所以暴力跑就行了。多测,每次给出n个数,m个数对。要求找到最大的f(i,j),cnt(i)定义为i出现的次数,f(i,j)定义为(i+j)*(cnt(i)+cnt(j)),并且i和j不能是m里面出现的数对。

2024-08-25 16:05:38 634

原创 牛客小白月赛99 F-自爆机器人

转化一下,那么就是长度为n的线段,最多可以由多少个长度不同的线段组成?贪心的想,线段的长度肯定是从一开始递增最多了,那么如果由v个不同的线段,那么1+2+3+4.....+v<=n,根据等差数列求和,所以v最大也就是根号n,所以真正的时间复杂度应该是O(sqrt(n)*(t-n)).多测,每次给出n,m,t,坐标轴上初始机器人的位置在0,怪物的位置在n,机器人初始往正整数方向行走,碰到墙壁会转向并损害墙壁,碰到怪物会瞬间爆炸,爆炸威力等于行走时间,一共有m个位置可以放置墙壁。

2024-08-25 15:36:22 537

原创 CF 965 C. Perform Operations to Maximize Score

多测,每次给出n和k,n代表长度为n的数组,每个数有二个属性,第一个是本身的值,第二个是这个数是否能被修改,如果能被修改那么就可以让k减去1让数的值增加1,可以从数组里面随意拿出一个数,对于剩下的数求出中位数,问拿出来的数和中位数的和的最大值是多少?贪心+二分,可以观察到最终的答案构成是拿出的数和中位数组成的,那么就只有二种情况,第一种是让拿出来的数变大,第二种是让中位数变大,不存在都变大的情况,因为花费1代价不一定可以让中位数变大,但是一定可以让拿出来的数变大。最后二种答案取最值。

2024-08-22 22:47:05 253

原创 CF 967 D. Longest Max Min Subsequence

那么就可以贪心的考虑这个问题,设置二个指针head和tail,head到tail的区间为可以选择的区间,tail+1到n的区间是如果不取tail位置,那么后面就不会出现tail位置这个元素,1到head-1的位置代表元素已经选了的区间。多测,每次给出长度为n的数组,要求找出没有重复元素的,最长的子序列,如果不止一个最长子序列,那么就选择字典序最小的,比较字典序的时候,如果这个元素的下标是奇数,那么就变成负数比较。

2024-08-22 20:21:31 545 3

原创 CF 967 C. Guess The Tree

交互题,多测,每次给出n,代表一颗树有n个点,最大15n次询问,每次询问可以询问到二个点距离之差最小的点,如果存在二个点到询问的二个点距离之差相同,那么优先返回到第一个询问点距离比较小的点。从数据范围来看,可以明显发现这题的时间复杂度是O(nlogn),每次询问相当于一次二分的操作,所以可以想到本题应该是,遍历每个节点并且询问出遍历的节点和什么节点相连。

2024-08-22 15:42:57 281

原创 ABC 362 E - Count Arithmetic Subsequences

dp,因为是要找出等差数列,并且这题的数据量极小,所以可以考虑设计dp数组,dp[i][j][k][v],i代表当前寻找的等差数列倒数第二项,j代表最后一项,k代表还需要寻找的长度,v代表当前判断的数,dp[i][j][k][v]代表以i为第一项,j为第二项,还要寻找k个数的等差数列数量。给出长度为n的数组,要求找出所有的等差数列,并且按照长度递增输出。

2024-08-22 13:26:32 266

原创 CF 966 Div3 F. Color Rows and Columns

dp,先求出dp[i][j],i代表第i个长方形,j代表这个长方形得到j分,dp[i][j]代表最小的涂色数,然后就可以理解成对于第i个长方形选择j分就要填涂dp[i][j]个格子,然后就是对于每个长方形都选择一个dp[i][j]来进行dp就可以了。多测,每组测试数据给出n和k,n代表有n个长方形,k代表需要的到k分,每个长方形都有宽和高,每次可以填涂一个格子,如果填满一列或者一行就可以获得一分,问达到k分最少需要填涂多少格子。

2024-08-21 22:49:51 894

原创 牛客周赛56 F.不是烤串故事

多测,每组测试给出二个字符串s和v,定义下标从1开始,可以选取字符串s的前i个字符 s1s2⋯si,然后将这一部分反转后与剩余部分拼接,求最长的公共前缀长度和可以让公共前缀最长时的反转下标。对于s串来说,如果我们反转了一部分,那么这个时候最长公共前缀是有三种可能,第一种可能是在反转的那一部分里面,第二种是在反转和不反转的交界处,第三种是在不反转的位置。Z函数的作用是预处理出s的任意长度的前缀反转之后和v的最长公共子串长度,dp数组的作用是对于不反转的部分求最长公共子串长度。

2024-08-19 22:33:02 179

原创 牛客周赛55 E 小红的序列乘积2.0

思路:dp+贡献法。从左边到右边考虑数组,第i个数有选或者不选二种可能性,那么记忆化的转移就是选这个数或者不选择这个数,这样就可以出现所有的子数组。令当前位置为x,那么后面还有n-x个数,这些数都可以选择或者不选择,那么这个6就会出现2^(n-x)次,也就是2^(n-x)次贡献。所以代码就很显然了。题意:给出长度为n的数组,可以随意的选择其中的一些数,构成一个新的数组,这个数组的价值定义为,这些数做前缀乘积,然后前缀乘积数组末尾为6的数的个数,问题目给出的数组价值为多少。

2024-08-12 20:50:01 238

原创 ABC 366 E - Manhattan Multifocal Ellipse

题目中要求的距离是曼哈顿距离,曼哈顿距离很特殊的一点是,对于二个点来说它们的x距离和y距离可以相互独立计算。观察数据范围,可以发现的是x和y的范围在[-1e6,1e6]之间,d的范围是[0,1e6]。那么就可以知道能够满足距离总和小于d的点的x和y坐标范围是在[-2e6,2e6]之间,可以分别计算出全部可能的x位置,这个位置上和n个点x的距离总和,y也同理,然后双指针的寻找全部的符合条件的x和y。给n个点和一个最大距离d,求出有多少个点距离这n个点的距离总和小于等于d。

2024-08-11 17:35:12 299

原创 CF 963 D. Med-imize

首先数组下标从0开始,举个例子,如果n=8,k=3,那么数组的下标是:0,1,2,3,4,5,6,7,将这些下标全部对k取余,下标就是:0,1,2,0,1,2,0,1。可以发现这个规律普遍存在全部的情况,那么可以抽象一下,最终数组的长度是v,那么能够构成这个数组的元素在原数组中,下标对k取余之后的值是,0,1,2,3,......,v-1。总结一下,如果k=4,n=7,数组下标就是:0,1,2,3,0,1,2。最终数组的长度就是3,最终待选的下标是:0,1,2,0,1,2。如果将这些数堆起来看呢?

2024-08-08 21:09:32 361

原创 ABC 365 F-Takahashi on Grid

因为第二步结束之后,我们的位置一定是这一列的最上面或者最下面,那么明显的优化思路就是,预处理出从每列最上面点和最下面的点,重复一次上面的步骤能够走到的点。第一个难点,是怎么预处理出一次跳跃的点,我们可以使用st表来维护区间的最大值和最小值,如果我们是从一列的最上方的点开始走那么,我们操作结束之后,我们肯定是停留在某一列的最上方的点,这一列一定是最上方的点,低于操作值的点。如果我们是从一列的最下方的点开始走那么,我们操作结束之后,我们肯定是停留在某一列的最下方的点,这一列一定是最下方的点,高于操作值的点。

2024-08-06 21:04:57 535

原创 ABC 365 E - Xor Sigma Problem

可以想到的是使用异或前缀和,异或有一个性质是:a^b^b=a,所以如果用pre[i]来代表从0到i的异或值,那么从l到r的异或值就是pre[r]^pre[l-1],这样这题的答案就成了找二个位置不同异或前缀和异或的总和了。再次思考,对于二进制的某个位来说,我们可以枚举右端点,如果右端点是1,那么能够异或为1的区间就是之前为0的位置,如果右端点为0,那么能够异或为1的区间就是之前为1的位置。给长度为n的数组,要求求出所有连续区间长度不为1的区间的异或值。

2024-08-05 20:49:23 225

原创 Educational Codeforces Round 168 E. Level Up

可以发现一个明显的规律,如果k越小那么,主角升级的一定越快,那么主角从1到i(i代表题目里面问能不能战斗的怪物的位置),可以发现是具有单调性的,那便是k大于等于某个值之后,主角一定和怪物战斗,那么就可以二分的寻找这个最小的k。有n个怪物,每个怪物都有一个等级,主角从左到右打怪物,如果主角的等级严格大于了怪物的等级,那么怪物就会逃跑,主角每升一级需要杀死k个怪物,多组询问题目给出第几个怪物和升级一次需要杀死的怪物,问主角能不能和这个怪物战斗?

2024-08-02 20:36:37 431

原创 CF962 E. Decode

但是直接的找到符合条件的区间的时间复杂度是不行的,所以可以先使用map 来记录前缀和相等的位置,并且这样存下来的字符串是一个大串的,例如:010101,前缀和是-1,0,-1,0,-1,0,map[-1]里面存的值就是1,3,5,意思就是2到3,4到5是符合条件的字符串,而且可以发现2到5也是符合条件的,这样一来可以更快的算出这类串的贡献(定义是一类串那么它们的前缀和的值就是相同的)。为什么需要开前缀和来记录呢?

2024-08-01 21:17:11 467

原创 CF Pinely Round 4 B. AND Reconstruction

从二进制角度出发,如果b[i]的二进制位为1,那么a[i]和a[i+1]这个二进制位都要为1,这个是必须满足的要求,所以可以对每位二进制位进行构造,最后判断一下能不能变成b数组就行了。多测,给你一个长度为n-1的数组b,要求求出数组a,要求b[i]=a[i]&a[i+1],如果满足输出a数组,不满足输出-1。

2024-08-01 21:09:39 127

原创 2024河南萌新三 H-魔法

dp[i][j][k],i代表横坐标,j代表纵坐标,k代表花费的体力值,dp[i][j][k]代表在当前位置用魔法次数最小的数,所以含义就是在(i,j)这个点花费了k个体力的时候使用魔法次数的最小值。所以最终遍历一下在(n,m)这个点花费合法体力的的最小值就行了。题目给出n*m的迷宫,小白站在(1,1)这个点,终点在(n,m),小白有自己的体力值,迷宫中的每一个点都有一个值,这个值代表小白走到这个点需要花的体力值。小白会魔法,可以不用体力就走到下一个格子,问小白到终点最少用几次魔法?小白只能向下和向右。

2024-07-31 20:16:31 232

原创 CF Pinely Round 4 C. Absolute Zero

如果数组里面有奇数和偶数那么就一定不可以,本题的本质是让n个数变成相同的数,如果有偶数和奇数,如果减去偶数,那么奇偶性不变,如果减去奇数,那么也是奇偶性不变的,所以不可能变成相同的数。如果全是奇数或者全是偶数的情况下,每次可以减去最大值的一半,从二进制的角度来说,相当于右移了一位,对于其他数来说,变换之后它们的值也小于等于最大值的一半。所以这样的策略是合法的。多测,给长度为n的数组,最多四十次操作,每次可以对每个数的减去一个任意值,最后询问能否都为0,可以就输出每次减少的值,不可以就输出-1。

2024-07-30 20:55:33 293

原创 ABC364 F - Range Connect MST

根据题意可以知道,对于[1,N]这些点它们之间是不会有边相连的,所以可以先根据给出了的代价进行从小到大的排序,然后对于每组数据的[L,R],这些点都应该在同一个联通块里面,如果中间有点不在同一个连通块里面,那么就给这个点连上一条代价为C的边。例如样例中给出的1 2 2,1 3 4,2 4 5,先根据第一组数据来将1,2,5这三个点相连接,然后对于第二组数据,1,2和3不在同一块连通块,如果想要联通,那么就要2连上6,3连上6就可以了。题目给出N+Q个点,有Q次操作,每次操作会给出L,R,C。

2024-07-29 19:22:26 476

原创 ABC364 E.Maximum Glutton

本题有个很直接的思路,那就是动态规划,最直接想到的dp数组是dp[i][j][k],i代表前i盘菜,j代表吃了菜的总甜度,k代表吃了菜的总咸度,dp[i][j][k]的值是能吃的数量。但是可以满足时间复杂度并且正确的找到答案吗?明显也是可以的,时间复杂度是O(NNX),符合题目要求,当dp数组被递推完全之后,取遍历前n个,取i盘菜,甜度为k的数组,如果dp数组值满足咸度的要求,那么就i就是我们能够在不超过甜度和咸度的情况下吃的最多的菜,但是根据题意,可以再吃一盘,这个一盘要和n取最小值。

2024-07-28 16:06:46 475 2

原创 CF962 DIV3 F. Bomb

给n个初始值Ai,答案每次可以加上一个值,加上这个值之后,这个值会减少Bi,最多操作m次,问答案最多是多少?

2024-07-27 15:33:53 243

原创 牛客暑假训练4 A. LCT

先构建出树,然后从根节点跑出每个节点的深度。因为题目保证了询问c的时候,c不会是其他节点的儿子,所以顺序的求出当前联通块的根节点的深度,这个深度就是之后询问这个点的答案。给一颗有根树,依次给出n-1行的信息,分别为a,b,c,意思是链接a和b之后,询问以c为根节点的最大深度。保证询问c的时候,c不会是其他节点的儿子。

2024-07-26 20:15:10 231

原创 ABC D - Palindromic Number

【代码】ABC D - Palindromic Number。

2024-07-22 19:23:41 197

原创 ABC 393 F - Palindromic Expression

因为数字n的因子很小,所以就算是因子全部是2,并且n为1e18,因子个数也才60个。所以可以dfs暴力的求出最终字符串的每个数字位置的值就可以了。给定数字n,求这个一个1,2,3,4,5,6,7,8,9和*,构成的字符串,要求这个字符串是个回文字符串,并且计算结果为n。

2024-07-21 17:15:36 165

原创 CF 959 C. Hungry Games

考虑dp,dp[i]的含义是从i开始加和能有多少符合条件的区间。因为dp数组的含义是从i开始加,所以可以当成之前加的值变成了0,所以dp的转移方程是,从i开始加然后第二个大于m的位置的dp值加上到这个位置的区间数量,所以先求前缀和,然后倒着求dp数组的值,最后加上全部的dp值就可以了。n个数,取区间[l,r],从l加到r,过程中如果和超过了m,那么就变成0,在r这个点的和不能能是0,问n个数能有多少个区间满足?

2024-07-21 15:47:36 227

原创 CF 959 B. Fun Game

将第一个字符串的字符称为待改变字符,第二个称为目标字符,首先考虑四种情况,如果待改变的字符是1,如果要需要变成1,那么只要和0异或就可以了,如果要变成0,那么只要和1异或就可以了。如果待改变的字符是0,如果要需要变成1,那么只要和1异或就可以了,如果要变成0,那么只要和0异或就可以了。因为[l,r]的区间可以仍取,所以只要在第一次出现待改变字符和目标字符不同的情况之前,待改变字符出现了1,那么就是可以让第一个字符串变成第二个字符串的,否则就不行。问无限次操作之后,能不能让第一个字符串等于第二个字符串。

2024-07-21 14:37:50 192

原创 牛客暑假训练2 C.Red Walking on Grid

对每一列进行考虑,从后往前,如果后一位是红色,当前位也是红色,那么当前的位置的答案就是后一位的答案加一,但是这可能并不是当前位最大的情况,如果当前位的上下位置是红色,那么就需要比较一下从上下转移过来,或者从后面转移过来的大小。宽为2,长为n的方格,每个格子上有一种颜色,一共有二种颜色,分别是红色和白色,开始的时候选择一个红色的格子,然后每一步都可以选择上下左右的方向进行行走,问最多可以走多少步?

2024-07-20 14:43:33 279

原创 牛客暑假训练营1 B.A Bit More Common

考虑奇数对答案的贡献,因为只能有一种子序列并且这个子序列必须是k个奇数构成的(如果只需要k-1个奇数,就可以满足条件,那么k个肯定也可以,所有不是只有一种子序列)。如果当前二进制位的数为这一位二进制位的唯一一个0,那么这个位置就叫做特殊位,必须保证k个数,每个都有至少一个特殊位,如果没有特殊位就代表这个数可以被那走与要求不符。A题中求出的答案是只要包含一个子序列就可以的总和,自然也包含存在至少二个的子序列,所以可以用A题求出的答案来减去只包含一个子序列的数量。特别的,如果只有一个奇数,并且是1,那么有。

2024-07-20 01:24:13 460

原创 牛客暑假训练营1 A.A Bit Common

(因为最多不会超过2的m次方,所以二进制的长度最多不会m,除去第0位,所以为m-1)。对于n-k个偶数来说,这些数除了二进制位的第0位必须位0以外,其他位数都可以随便填,那么可以随便填的二进制位是(n-k)*(m-1),(n-k代表偶数的个数,m-1代表除了第0位的0以外其他的位数。如果一个子序列AND和为1,可以知道这些数肯定是奇数(因为奇数的二进制尾数为1),那么这个序列就可以分为偶数和奇数来判断,枚举n中奇数的个数,奇数的个数为k,然后考虑这些奇数如何放置?,因为这些数的范围是。

2024-07-19 21:26:00 633

原创 2024河南萌新联赛第一场 D 小蓝的二进制询问

对于从[l,r]上的数,可以先算出从[0,r]的所有二进制1然后减去[0,l]的所有二进制1。思考如何计算,从样例中给出的5来思考,[0,5]的二进制表示分别为:000,001,010,011,100,101。可以发现二进制的最后一位循环的是01,倒数第二位循环的就是0011,根据二进制数的性质就可以知道,每一位的二进制循环长度是2的次方。分别计算每一位二进制1的数量累加即可。

2024-07-17 20:07:17 388

原创 957 Div3 E. Novice‘s Mistake

因为n的最大值是100,a的最大值是10000,b的最小值是1,那么求出来的y最多是999999,所以可以得出字符串的长度不会大于6,那么就可以把a从1枚举到10000,然后枚举b,因为字符串的长度是小于等于6的,b的范围是[a*n字符串的长度-6,a*n字符串的长度-1],判断满足题意的b,然后在求出y和x比较就可以了。将之前求出x的a和b,拿出来计算出y=a*n-b。如果x等于y那么这对a和b就是合法的。

2024-07-16 20:41:55 276

原创 牛客小白月赛98 E.and xor or

记录下来就应该是0,1,1,3,4,5.意思是上一个从当前位置到记录的位置这一段区间是不满足的,例如位置3记录的是1,那么意思是[2,3],这段区间的这个二进制位是不能变成1的,如果要变成1,那么就必须从2往前,例如[1,3],如果这个二进制位满足要求,那么以3位右端点的区间贡献就是记录的1-0=1,这样就可以记录当前二进制位可以变成1的所有区间,但是还需要排除比当前二进制位高的位置变成的1,那么就可以开一个数组来记录高位二进制以当前位置为右端点的区间的左端点。

2024-07-15 20:29:24 331

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除