前缀和
青烟绕指柔!
我不怕千万人阻挡,只怕自己投降。
展开
-
Simfonija
题目链接:Simfonija我们最后改变的k个数字,一定是改变排序后的两个端点区间的元素。所以我们可以枚举最后不会改变的 n-k 个数字,而且一定是连续的。所以也就是求这个连续区间的最小值,...原创 2021-03-18 14:59:49 · 110 阅读 · 0 评论 -
[JOI 2021 Final] 雪玉
题目链接:[JOI 2021 Final] 雪玉我们可以注意到,对于一段相邻两个雪球组成的区间来说,这个区间只会对这两个雪球贡献。那么我们每次移动的时候,一定是小区间先被用完,那么我们可以维护移动过的区间,然后移出区间外在做贡献,贡献按照区间排序后就是一个区间加的问题了,可以前缀和。对于两个端点单独处理。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>#define i原创 2021-03-01 13:21:03 · 393 阅读 · 0 评论 -
Delete Prime
题目链接:Delete Prime对每个问题单独考虑。第二个问题就是第k个位置的值,那么我们对当前的n分解,直到当前分解出来大于k了,那么问题转化为第 i 轮被移出的第 j 个数的问题,直接在第 i 轮出去的前缀和上面二分。第一个问题就是 k 是第几个位置,同理每次对n分解,然后求出某次大于k了,那么就是求出数字是第 i 轮,第几个出去的,前缀和预处理即可。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<原创 2020-11-28 00:22:35 · 593 阅读 · 0 评论 -
Codeforces - Two Editorials
题目链接:Codeforces - Two Editorials遇到这种选两个区间的问题,我们一般是分段,然后求一个前后缀最大值然后合并。但是这里区间是不好分开的,于是我们可以按照输入的区间中心点排序。对每个区间的前后缀来合并。因为我们按照中心点排序之后,区间具有某种单调性前面的一定能一起处理,对于后面的区间一定不会影响前面的答案。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.原创 2020-11-21 21:06:02 · 247 阅读 · 0 评论 -
Codeforces - Yet Another Subarray Problem
题目链接:Codeforces - Yet Another Subarray Problem因为m很小,所以枚举最后的的子串 %m 的长度即可。然后做一个倍数为m的前缀max。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>#define int long longusing namespace std;const int N=3e5+10;int n,a[N],m原创 2020-09-27 18:10:48 · 162 阅读 · 0 评论 -
区间覆盖问题
题目链接:区间覆盖问题思路挺简单,不过细节挺多的。我们先对区间求并,然后可以找到合法可以选择的区间,然后存个前缀和,二分第一个合法的区间位置即可。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>#define int long longusing namespace std;const int N=2e5+10;int n,q,m,sum[N],k,cnt;pai原创 2020-09-16 23:15:32 · 220 阅读 · 0 评论 -
Codeforces - CF1132CPainting the Fence
题目链接:Codeforces - CF1132CPainting the Fence先枚举第一个删除的人。然后枚举第二个,利用前缀和优化计算。每次第二个人会消除的贡献只是覆盖后为1的地方,前缀和计算1的地方的个数即可。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>//#define int long longusing namespace std;const i原创 2020-09-12 20:05:44 · 206 阅读 · 0 评论 -
Codeforces - Increasing Frequency
题目链接:Codeforces - Increasing Frequency每次修改能造成贡献的一定是同一种数字,所以我们对每一种数字单独讨论即可。考虑修改区间 [i,j] 的答案贡献:j - i + 1 - f[i,j] + 最初c的个数 。 f 为 区间c个数然后把f用前缀和的形式展开:j - f[j] - (i - f[i-1]) + 1 + c_cnt。显然维护 i - f[i-1] 的前缀min即可。AC代码:#pragma GCC optimize("-Ofast","-fu原创 2020-09-10 17:05:34 · 261 阅读 · 0 评论 -
HDU - 5317
题目链接:HDU - 5317因为一个数不同的素因子不超过logn个,所以答案不会很大。我们枚举每个答案 i ,如果合法,那么就是这个区间的 i 的倍数个数大于1这个东西可以前缀和预处理。并且我们可以算出答案上界为7AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>//#define int long longusing namespace std;const int原创 2020-08-15 14:52:07 · 186 阅读 · 0 评论 -
HDU - 4909
题目链接:HDU - 4909考虑如果没 ‘?’ 我们怎么计算,因为我们只需要知道奇偶信息,我们对每个点开一个前缀状态奇偶压缩,如果和之前某一个状态相等,那么证明做减法之后也是相等的。现在多了一个 ‘?’ ,我们枚举表示的字母即可。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>//#define int long longusing namespace std;co原创 2020-08-09 00:24:27 · 132 阅读 · 0 评论 -
EOJ Monthly 2020.7
题目链接:EOJ Monthly 2020.7D比赛的时候没做出来,所以就写A,B,C,E的题解了。A:显然任意一个前缀b的和肯定小于任意一个前缀a的和。然后判断是否有多种方法构造就直接判断最后一个b之前是否有两个连续的a即可。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>//#define int long longusing namespace std;const原创 2020-07-17 22:13:55 · 263 阅读 · 0 评论 -
Tweetuzki 爱军训
题目链接:Tweetuzki 爱军训如果直接去做是很复杂的。我们假设全部都是第一次出队,那么我们可以发现,如果第i个改成第二次出队,那么答案增加:(n-i)*w-sum(i+1,n)然后我们从后往前找第二次出队的,我们可以发现后面是否出队和之前第二次出队的是没有影响的。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>#define int long longusin原创 2020-07-02 20:45:47 · 176 阅读 · 0 评论 -
No Link, Cut Tree!
题目链接:No Link, Cut Tree!因为是完全二叉树,所以我们可以发现只有logn层,所以我们可以对每一层暴力统计。怎么统计呢?我们可以利用dfs序,对每一层存下dfs序,然后对于不要的dfs序区间,二分即可找到对应位置。然后怎么快速求值呢?显然可以前缀和。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>//#define int long longusi原创 2020-05-29 22:31:51 · 285 阅读 · 0 评论 -
Bracket Sequencing
题目链接:Bracket Sequencing显然之和前缀和,和前缀和的min有关。如果前缀和大于0,且前缀和的min也大于0,直接放前面最优。如果前缀和大于0,且前缀和的min小于0,所以肯定是先放前缀和的min大的。如果都小于0,假设前缀和为a,前缀和的min为b我们对于前后两项可得:b1+a2<a1+b2 -> a1-b1<a2-b2AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include&l原创 2020-05-10 22:43:25 · 308 阅读 · 0 评论 -
[POI2006]KRA-The Disks
题目链接:[POI2006]KRA-The Disks显然如果上一个盘子的位置为pos,那么我们就需要从1->pos中找到第一个小于k的位置。直接线段树即可,因为是在前缀中找,所以不用二分。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>//#define...原创 2020-05-04 12:43:42 · 254 阅读 · 0 评论 -
异或序列
题目链接:异或序列很水的题。因为异或区间,我们不能单独对每个点算贡献。但是我们先做一个前缀异或和之后,那么任意两个点之间必然对应一个区间,所以再算贡献即可。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>#define int long longusing ...原创 2020-04-12 11:39:37 · 182 阅读 · 0 评论 -
Codeforces - Monotonic Renumeration
题目链接:Codeforces - Monotonic Renumeration因为任意两个相同的数字之间必须相等,其实就是这两个数之间只能填同一个数字。所以相当于就是把区间分成一个部分 答案就是 ans=2^(cnt-1)所以就是求多少部分,前缀和维护即可。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#inclu...原创 2020-04-02 17:23:54 · 233 阅读 · 0 评论 -
Codeforces - Sasha and a Bit of Relax
题目链接:Codeforces - Sasha and a Bit of Relax两个区间的异或相等是什么?其实就是总区间异或为0.然后要求是偶数区间,所以分别奇偶统计前面某个异或和的个数即可。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>//#define...原创 2020-04-02 16:44:10 · 178 阅读 · 0 评论 -
Codeforces - Welfare State
题目链接:Codeforces - Welfare State容易想到的是,利用势能线段树维护lazy,或者splay维护lazy。但是其实,我们可以发现,对于每个点,能够影响到他的就是,最后一个对于他的单点修改以及之后的所有操作2的max。所以对每个点找到最后一个修改的位置,然后做后缀max即可。AC代码:#pragma GCC optimize("-Ofast","-funrol...原创 2020-03-03 12:18:25 · 243 阅读 · 0 评论 -
Codeforces - Almost Regular Bracket Sequence
题目链接:Codeforces - Almost Regular Bracket Sequence括号序列,一般把’(‘当成1,’)'当成-1,。那么合法的括号序列满足什么条件呢?任意前缀和大于等于0,并且最后的和为0。所以这道题,如果括号差值为2才有解,否则无解。然后假设’(‘比’)‘多一个,那么我们就枚举每一个’(‘看是否变成’)'还是合法的,改变这个之后,后面所有值都会减2,所以如...原创 2020-02-20 18:19:46 · 229 阅读 · 0 评论 -
Codeforces - Maximum Subrectangle
题目链接:Codeforces - Maximum Subrectangle考虑求子矩形的方法:二维前缀和,分别求出列和行的前缀和,然后再相乘。第二种:矩形左上角(a,b),右下角(c,d)那么对于数组sx,sy都是对应方向上面的前缀和。sum = (sx[c]-sx[a-1])*(sy[d]-dy[b-1])第一种很难求矩形的最小值,但是第二种方法,如果我们求出长度为i的x轴的最小值...原创 2020-02-19 16:37:36 · 163 阅读 · 0 评论 -
托米的字符串
题目描述托米有一个字符串,他经常拿出来玩。这天在英语课上,他学习了元音字母{a,e,i,o,u}a,e,i,o,u以及半元音 {y}y。“这些字母是非常重要的!”,托米这样想着,“那么我如果随机取一个子串,里面元音占比期望会有多大呢?”于是,请你求出对于托米的字符串,随机取一个子串,元音({a,e,i,o,u,y}a,e,i,o,u,y)字母占子串长度比的期望是多少。输入描述:读入一个长度...原创 2020-01-23 21:11:32 · 403 阅读 · 0 评论 -
Chino with Train to the Rabbit Town
可以相当当前位置,要么是前一位的答案,要么是新组成值为k的队列。所以我们可以记录前缀异或和,就可以比较方便地转移了。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>//#define int long longusing namespace std;const ...原创 2020-01-10 11:56:09 · 241 阅读 · 0 评论 -
储物点的距离
题目链接:储物点的距离看似是一道划分树的题目,但是因为没有修改操作,我们直接前缀和即可。我们用前缀和维护区间的物品总数,以及维护区间物品全部移动到第一个点的花费。然后就根据l,r,x之间的关系,推一推式子就行了。AC代码:#include<bits/stdc++.h>#define int long longusing namespace std;const int...原创 2019-12-24 14:26:31 · 345 阅读 · 0 评论 -
ICPC Russia High Load Database
H. High Load Databasetime limit per test2 secondsmemory limit per test512 megabytesinputstandard inputoutputstandard outputHenry profiles a high load database migration script. The script is the ...原创 2019-11-28 16:50:52 · 455 阅读 · 0 评论