![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
前缀和
timidcatt
永远不要放弃战斗
展开
-
C. Medium Design Codeforces Round 904 (Div. 2)
思路:我们设取得最大值的位置是i,我们要让这个最大值最大,那么所有包含这个位置的区间都要选,并设这些区间去掉重合部分后组成的大区间为[L,R],那么这个区间内最小值的取值位置一定是L或R,因为假如最小值的取值位置在LR里面,那么可以把这个位置左边或右边的区间删掉同时另一边的最大值仍然等于原来的最大值,最小值又变成了新的大区间的端点。题目大意:有一个长为m的数组初始全为0,有n个区间[li,ri],每选择一个区间就要令区间内所有数+1,要求选择一些区间,使得数组的最大值-最小值最大,求这个差值。原创 2023-10-22 18:15:45 · 564 阅读 · 3 评论 -
D. Trees and Segments Codeforces Round 893 (Div. 2)
我们令dp[i][j]表示修改j次,在[i,n]中最大有多少个1,首先大区间能从小区间转移,dp[i][j]=dp[i+1][j],然后求出在i~n内0的数量cnt,dp[i][cnt]=max(dp[i][cnt],j-i+1),然后修改j-1次能做到的,j此也能做到,dp[i][j]=max(dp[i][j],dp[i][j-1])。思路:因为每个a,对应的b都不同,所以对于一个确定的i,我们只要求出当a为1~n中某个合法的数时,对应的最大的b是多少,然后枚举a求最大值即可。原创 2023-09-07 20:58:57 · 174 阅读 · 0 评论 -
Sequence 2023牛客暑期多校训练营6 E
所以我们要分两种情况讨论,一种是数组中从左往右第二个1和第一个1组合,另一种是第二个和第三个1组合,然后分别对合法区间数求前缀和,每个0的贡献都是1,每个含有两个1的区间,整个区间贡献是1,例如对于0 0 1 0 0 1 0 0 1 0 0 1 0这个数组,第一个前缀和数组sum1求出来的是1 2 3 3 3 3 4 5 6 6 6 6 7,第二个数组sum2是0 0 0 1 2 3 3 3 3 4 5 6 6,另外,还要特判一下每个区间内1的数量是否是偶数,如果是奇数就可以直接输出no了。原创 2023-08-05 00:39:40 · 404 阅读 · 0 评论 -
Qu‘est-ce Que C‘est? 2023牛客暑期多校训练营4-J
题目大意:求满足如下条件的长度为n的数组数量:所有数字的范围在-m~m之间,任意连续的元素数量>1的区间的的区间和>=0。原创 2023-07-29 12:19:32 · 704 阅读 · 0 评论 -
C. Least Prefix Sum codeforces 1779C
所以从m开始向左累加的每一个和都应该是小于等于0的,那么我们从m开始向左遍历,如果当前遇到的数本身就是小于等于0的,直接累加即可,如果不是,我们先将其放入优先队列中,因为我们之后操作肯定是对最大的数进行操作取得的收益最大,然后我们加上这个数,判断如果当前的累加和已经大于0了,就要-2倍的优先队列堆顶的数,直到累加和小于等于0,特殊的是a1不需要任何处理。对于m右边的数,我们同样用之前的方法可以推出从第m+1个数开始,向右累加的每一个和都要大于等于0,向右遍历的操作也有上面类似,不再赘述。原创 2023-01-04 16:56:52 · 244 阅读 · 0 评论 -
C2. Sheikh (Hard Version) codeforces 1732C2
思路:由easy version 可知每个区间数值和与异或和的差的最大值等于整个区间的相应差值,且区间内数越少,差值只可能越小,所以依然是要找每个区间内最短的一个区间使其差值等于最大值,因为每个数都不超过2的31次方,所以我们从区间两端分别向中间找31个非零的数,必然能使差值不再等于最大值,我们在输入数组时,可以记录每个位置的下一个非零数的位置和上一个非零数的位置所以每次询问最多遍历31*31次,时间复杂度不到O(1000q),4s不会超时。原创 2022-11-29 20:41:55 · 248 阅读 · 0 评论 -
E. Wish I Knew How to Sort codeforces1754E
题目大意:有一个长度为n的只含有0和1的数组,要求把数组按从小到大排序,但每次操作只能随机选取一前一后两个位置并交换这两个位置上的数,问期望的交换次数是多少。原创 2022-11-08 18:59:31 · 123 阅读 · 0 评论 -
CCPC2022桂林 C. Array Concatenation(gym 104008C)
sum2的值等于2^i*2^i*sum2,再进行m-i次操作1,在枚举i时维护最大值。题目大意:又一个长度为n的数组和规定的m次操作数,有两种操作,操作一是将当前的数组复制到数组的末尾,操作二是将数组翻转后放到数组的前面,问操作m次后最大的前缀和的和是多少,要求求出对1e9+7求余后的余数的最大。我们发现sum2的数量为等差数列的和,于是我们可以得到进行了i次操作1的数组的前缀和的和为(2^i-1)*2^(i-1)*sum2+2^i*sum;原创 2022-11-01 14:22:01 · 583 阅读 · 0 评论 -
B. Balanced Substring
Problem - 873B - Codeforces题目大意:有一个长度为n的由0和1组成的字符串,找一个最长的子串,使子串中0和1的数量相同。思路:用前缀和数组统计1和0的个数,遍历字符串,如果遇到1,则前缀和数组+1,如果遇到0,则-1。建立好前缀和数组后,再遍历数组,如果当前位置的前缀和在前面没有出现过,就记录这个位置,如果当前位置的前缀和不是第一次出现,那么当前的位置减去之前记录的的位置就是对应合法子串的长度,维护最大值即可。...原创 2022-07-07 15:04:47 · 254 阅读 · 0 评论 -
好数 计蒜客 - T3258
suan 数 - 题库 - 计蒜客题目大意:给定K,求一个区间内有多少数能整除k。思路:打标,标记能整除k的数,将数量放入前缀和数组中,答案就是前缀和数组中该区间的差。原创 2022-07-05 19:05:49 · 240 阅读 · 0 评论