![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
前缀和
文章平均质量分 66
酷酷的Herio
这个作者很懒,什么都没留下…
展开
-
P4133 [BJOI2012]最多的方案(记搜)
P4133 [BJOI2012]最多的方案(记搜)记搜,因为fif_ifi递增很快,fif_ifi的个数不会很多。从大到小考虑每个fif_ifi是否可选。预处理fi,sif_i,s_ifi,si,sis_isi是fif_ifi的前缀和。令dfs(n,m)dfs(n,m)dfs(n,m)表示对于当前nnn考虑第mmm个fibonaccifibonaccifibonacci数,若f[m]>nf[m]>nf[m]>n显然不考虑,若sm−1<ns_{m-1}<nsm原创 2021-08-24 15:23:48 · 292 阅读 · 0 评论 -
P3625 [APIO2009]采油区域(前缀和)
P3625 [APIO2009]采油区域(前缀和)前缀和的好题。考虑将矩形分成三部分有多少情况。一共只有六种。然后就是预处理4个角的最大值前缀和值,和从第i行到第j行的最大前缀和值,第i列到第j列的最大前缀和值。一般矩形范围在n,m≤103n,m\le 10^3n,m≤103的,显然就是O(nm)O(nm)O(nm)的解法。时间复杂度:O(nm)O(nm)O(nm)// Problem: P3625 [APIO2009]采油区域// Contest: Luogu// URL: https:原创 2021-08-24 14:37:18 · 305 阅读 · 0 评论 -
前缀和与差分
前缀和与差分前言本文只写公式,不证明。下文中d\large dd数组均表示差分数组,a\large aa数组均表示原数组,pre\large prepre数组均表示前缀和数组,下面让我们let′s go\large let's\ \ golet′s go一维di=ai−ai−1an=∑i=1ndipren=∑i=1nai=∑x=1n∑i=1xdi=∑i=1ndi×(n−i+1)\large d_i=a_i-a_{i-1} \\原创 2021-07-24 22:47:22 · 185 阅读 · 0 评论 -
P1360 [USACO07MAR]Gold Balanced Lineup G(前缀和&Hash)
P1360 [USACO07MAR]Gold Balanced Lineup G(前缀和&Hash)瓶颈之处在于:如何快速判断一个区间的m种能力和相等。显然可以预处理所有能力的前缀和。区间满足的条件是 mmm种能力的前缀和之差都相同。即preRpre_RpreR的所有能力减去一个相同的值,等于preL−1pre_{L-1}preL−1。因此这两个前缀和在某种意义上等价的。因此我们尝试找到一个基准值,比如以第一个能力为基准,我们始终都让第一个能力为0,当不为0时我们就进行所有能力减1的原创 2021-07-03 10:39:32 · 457 阅读 · 0 评论 -
P3708 koishi的数学题(因数和)
P3708 koishi的数学题题目传送门值得学习的点因子和σ(n)=∑d∣nd\sigma(n)=\sum\limits_{d|n}dσ(n)=d∣n∑dx(mody)=x−⌊xy⌋×yx\pmod y = x - \lfloor\dfrac{x}{y}\rfloor \times yx(mody)=x−⌊yx⌋×yf(x)=∑i=1nx(modi)f(x)=\sum\limits_{i=1}^n x\pmod{i}f(x)=i=1∑nx(modi),求f(1),f(2)…,f(n)f原创 2021-07-01 21:40:11 · 408 阅读 · 0 评论 -
2017蓝桥杯省赛第十题:k倍区间
2017蓝桥杯省赛第十题:k倍区间给定一个长度为N的数列,A1, A2, … AN,如果其中一段连续的子序列Ai, Ai+1, … Aj(i <= j)之和是K的倍数,我们就称这个区间[i, j]是K倍区间。你能求出数列中总共有多少个K倍区间吗?输入第一行包含两个整数N和K。(1 <= N, K <= 100000)以下N行每行包含一个整数Ai。(1 <= Ai <= 100000)输出输出一个整数,代表K倍区间的数目。例如,输入:5 21 2 3原创 2020-10-16 09:32:06 · 496 阅读 · 0 评论 -
牛客编程巅峰赛S1第5场 题解
完全平方数的尾巴思路:暴力枚举。考虑a2(modp)=a(modp)×a(modp)a^2\pmod p=a\pmod p \times a\pmod pa2(modp)=a(modp)×a(modp)。所以当a=1000a=1000a=1000时又回到a=0a=0a=0,即周期为T=1000T=1000T=1000。所以我们只需要暴力枚举a∈[0,999]a\in[0,999]a∈[0,999]特判a2(mod1000)=xa^2\pmod {1000}=xa2(mod1000)=x。时间复杂度原创 2020-07-24 09:21:14 · 423 阅读 · 0 评论 -
C. OLED(二维差分)
C. OLED(二维差分)思路:统计每个发光像素在屏幕上的贡献,可以观察可得这个贡献是一个区间的形式,所以考虑用二维差分代表区间加,然后求前缀和即可得每个点出现的次数。传送门#include<bits/stdc++.h>using namespace std;const int N=4e3+5;int dif[N][N],n,m,a,b;int main(){ scanf("%d%d%d%d",&n,&m,&a,&b); for(int i=1;原创 2020-07-18 10:29:47 · 1158 阅读 · 0 评论 -
LC.209. 长度最小的子数组
LC.209. 长度最小的子数组方法1:前缀和+二分。考虑将其转化为具有单调性的前缀和数组,然后枚举区间左端点进行二分找答案即可。时间复杂度:O(nlogn)O(nlogn)O(nlogn)class Solution {public: int minSubArrayLen(int s, vector<int>& a) { vector<int>pre(a.size()+1); for(int i=1;i<=a.si原创 2020-06-28 08:52:17 · 530 阅读 · 0 评论 -
LC.42.接雨水
LC.42.接雨水传送门方法好多,学习到了。1.对每个柱子向左向右暴力枚举最大柱子,然后取较小的作为贡献。时间复杂度O(n2)O(n^2)O(n2),会TLETLETLE2.由1可以想到,预处理一下向左,向右的最大值,即预处理前缀最大值,和后缀最大值即可。时间复杂度:O(n)O(n)O(n)class Solution {public: int trap(vector<int>& h) { if(h.empty()) return 0;原创 2020-06-16 09:17:20 · 368 阅读 · 0 评论 -
Yet Another Bracket Sequence(线段树&前缀和)
Yet Another Bracket Sequence(线段树&前缀和)传送门思路:线段树维护最小前缀和。令′(′'('′(′为1, ′)′')'′)′为−1-1−1。保证前nnn项和为0且前nnn项最小前缀和大于等于0即可。#include<bits/stdc++.h>using namespace std;typedef long long ll;const int N=1e5+5;#define mst(a) memset(a,0,sizeof a)stru原创 2020-06-04 16:52:41 · 602 阅读 · 1 评论 -
十字爆破(二维转一维)
十字爆破(二维转一维)传送门一开始看成了n,m≤1e6n,m\leq1e6n,m≤1e6把我人看傻了,结果第二天发现是n×m≤1e6n\times m\leq1e6n×m≤1e6思路:二维转一维,从下标(0,0)(0,0)(0,0)开始记为000,编号xxx表示(x/m,x%m)(x/m,x\%m)(x/m,x%m)求每行,每列之和,用两个数组储存前缀和即可。最后ans[i][j]=pre[i]+pre[j]−a[i×m+j]ans[i][j]=pre[i]+pre[j]-a[i\times m+原创 2020-05-18 08:53:28 · 430 阅读 · 0 评论 -
P1043 数字游戏(区间dp)
P1043 数字游戏(区间dp)传送门思路:区间dpdpdp题目,首先将环形用两倍数组存,然后初始化区间长度为1的答案,然后用区间dpdpdp即可。时间复杂度:O(mn3)O(mn^3)O(mn3)AC代码:#include<bits/stdc++.h>using namespace std;const int N=105,inf=0x3f3f3f3f;int a[N][N][10],b[N][N][10],n,m,f[N];//数组a,b分别保存最大值,最小值int fun(原创 2020-05-16 16:17:53 · 504 阅读 · 0 评论 -
P1714 切蛋糕(前缀和&单调队列)
P1714 切蛋糕(前缀和&单调队列)传送门思路:单调队列+前缀和,枚举每个区间右端点,然后利用单调队列找到在范围内的最小左端点,不断更新答案即可。时间复杂度:O(n)O(n)O(n)AC代码:#include<bits/stdc++.h>using namespace std;const int N=5e5+5;int pre[N],n,m,ans=-2e9;deque<int>q;int main(){ scanf("%d%d",&n,&am原创 2020-05-16 12:44:57 · 422 阅读 · 0 评论 -
P1083 借教室(差分前缀和&二分)
P1083 借教室(差分前缀和&二分)传送门思路:差分前缀和+二分。对于区间的加减可以用通过差分数组实现,因为要求最小不满足条件的编号,因为此情况具有单调性,所以可以二分答案。时间复杂度:O(nlogn)O(nlogn)O(nlogn)AC代码:#include<bits/stdc++.h>using namespace std;typedef long long ll;const int N=1e6+5;struct p{ int d,l,r;}a[N];int原创 2020-05-15 18:21:36 · 313 阅读 · 0 评论 -
B. Nastya and Door (前缀和&暴力)
B. Nastya and Door (前缀和&暴力)题目传送门思路:给定区间长度的有关问题,可以考虑用前缀和实现对区间的查找。#include<bits/stdc++.h>using namespace std;const int N=2e5+5;int a[N],b[N];int main(){ int t; scanf("%d",&t); w...原创 2020-04-24 09:17:27 · 464 阅读 · 0 评论 -
D.牛妹吃豆子(二维前缀和&差分数组)
D.牛妹吃豆子(二维前缀和&差分数组)题目传送门给定矩阵:k个区间修改,给q个询问区间和。思路:二维差分数组板子题。AC代码:#include<bits/stdc++.h>using namespace std;const int N=2e3+5;typedef long long ll;ll a[N][N];int main(){ int n,m,...原创 2020-04-20 14:58:28 · 381 阅读 · 0 评论 -
差分数组&前缀和公式(一维,二维)
差分数组&前缀和公式(一维,二维)(所有公式本文不作证明,读者自行查阅相关证明.)原创 2020-04-20 14:38:04 · 513 阅读 · 1 评论 -
E1. Three Blocks Palindrome (easy version) (暴力&前缀和)
E1. Three Blocks Palindrome (easy version) (暴力&前缀和)题意传送门思路:AC代码:#include<bits/stdc++.h>using namespace std;int a[27][3000];int main(){ int t,n,ans; scanf("%d",&t); while(t--){...原创 2020-04-14 21:44:56 · 587 阅读 · 0 评论 -
Codeforces Round #632 (Div. 2) C. Eugene and an array (map&前缀和)
Codeforces Round #632 (Div. 2) C. Eugene and an array (map&前缀和)题目传送门 题意:求给定数组所有区间和非0的区间个数。思路:AC代码:#include<iostream>#include<map>using namespace std;typedef long long ll;map...原创 2020-04-09 10:45:19 · 343 阅读 · 0 评论 -
Maximize The Beautiful Value (前缀和&贪心)
Maximize The Beautiful Value (前缀和&贪心)题目传送门题意:给定长度为n不递减序列,求操作一次使其F[n]最大。#include<bits/stdc++.h>using namespace std;typedef long long ll;const int N=1e5+5;ll a[N],pre[N];int main(){ ...原创 2020-04-07 21:45:38 · 459 阅读 · 0 评论