随笔分类 -  差分与前缀和

基础算法
摘要:操作 1 :把某个节点 x 的点权增加 a 。操作 2 :把某个节点 x 为根的子树中所有点的点权都增加 a 。操作 3 :询问某个节点 x 到根的路径中所有点的点权和。 //点修改+树修改,(点->根)链查询 #include<bits/stdc++.h> #define ll long long 阅读全文
posted @ 2022-11-22 09:57 心悟&&星际 阅读(16) 评论(0) 推荐(0) 编辑
摘要:题目描述异或是一种神奇的运算,大部分人把它总结成不进位加法.在生活中…xor运算也很常见。比如,对于一个问题的回答,是为1,否为0.那么:(A是否是男生 )xor( B是否是男生)=A和B是否能够成为情侣好了,现在我们来制造和处理一些复杂的情况。比如我们将给出一颗树,它很高兴自己有N个结点。树的每条 阅读全文
posted @ 2022-11-07 19:43 心悟&&星际 阅读(18) 评论(0) 推荐(0) 编辑
摘要:问题描述 给定一棵有n个点的树(点的编号为1~n),根为1,点有点权,设点i的初始值为0,给出q个操作,每个操作给出两个点和一个值,u,v,t,表示将u到v的路径上的所有点加t,输出所有操作后每个点的点权,。 输入格式 第一行输入两个整数n,q表示树的点的数目与操作次数 下面n-1行,每行两个整数x 阅读全文
posted @ 2022-11-07 19:24 心悟&&星际 阅读(88) 评论(0) 推荐(0) 编辑
摘要:问题描述有一棵n个点的树,每个点i有点树v[i],q个询问求点u到点v最简路径上所有点权之和输入格式第一行n,q表示有n个点,q个询问第二行n个整数表示每个点的权下面n-1每行三个整数x,y,z描述边的信息及边长 下面q行每行两个整数u,v表示询问的两个点路径长度 输出q行,每行为u到v最简路径长度 阅读全文
posted @ 2022-11-07 18:49 心悟&&星际 阅读(26) 评论(0) 推荐(0) 编辑
摘要:问题描述有一棵n个点的树,每个点i有点树v[i],q个询问求点u到点v最简路径上所有点权之和输入格式第一行n,q表示有n个点,q个询问 第二行n个整数表示每个点的权 下面n-1每行两个整数x,y描述边的信息下面q行每行两个整数u,v表示询问的两个点 输出q行,每行为u到v最简路径上的点权和样例in5 阅读全文
posted @ 2022-11-07 12:09 心悟&&星际 阅读(31) 评论(0) 推荐(0) 编辑
摘要:P1614爱与愁的心痛 分析:共计n-m+1个连续区间,从这n-m+1个数中取最小值。问题转为如何求这n-m+1个数,可以用前缀和进行优化。 //P1614爱与愁的心痛 #include<iostream> #include<algorithm> using namespace std; int a 阅读全文
posted @ 2022-03-11 09:06 心悟&&星际 阅读(87) 评论(0) 推荐(0) 编辑
摘要:P3368 【模板】树状数组 2由于差分数组的前缀和,为原数组的值,用树状数组去维护原数组的差分数组,区间[l,r]修改为t[l]+=delta,t[r+1]-=delta,单点s的查询变成区间[1-s]查询,变成求[1-s]的前缀和。 //P3368【模板】树状数组 2 //P3374 【模板】树 阅读全文
posted @ 2022-03-07 17:26 心悟&&星际 阅读(27) 评论(0) 推荐(0) 编辑
摘要:P1204 [USACO1.2]挤牛奶Milking Cows从暴力思想出发,建立一个int数组b用来标记哪些时间有人挤牛奶,哪些时间空闲,然后从有挤牛奶的时间开始统计每一个段挤牛奶时间和空闲时间,并求最长挤牛奶时间和最长空闲时间,这样做时间复杂度为O(n*s),s为挤牛奶的时间长度,会TLE。如果 阅读全文
posted @ 2022-03-07 16:06 心悟&&星际 阅读(106) 评论(0) 推荐(0) 编辑
摘要:普通线段树问题引入给定一个序列有n(n<=100000)个元素,有如下两个基本操作查询:给定区间[l..r],求这个区间所有元素的和修改:修改某个元素的值。任务:输出每个查询的值。任务数量m(m<=100000),只有上述两种操作。朴素算法一对于查询任务可以使用循环完成,时间复杂度O(n)。对于修改 阅读全文
posted @ 2022-03-07 14:48 心悟&&星际 阅读(30) 评论(0) 推荐(0) 编辑
摘要:P3406 海底高铁题解区间修改可以用差分思想,统计每个点出现次数用前缀和,最后取最小值 #include<bits/stdc++.h> using namespace std; const int maxn=100009; int p[maxn],v[maxn]; long long ans; i 阅读全文
posted @ 2022-03-07 09:37 心悟&&星际 阅读(75) 评论(0) 推荐(0) 编辑
摘要:P5638 【CSGRound2】光骓者的荣耀题解:由题意可知枚举i=1~n-k,且i+k~n两段的和求最小值,纯暴力时间O(n2),此题会TLE,预处理前缀和,可以加快两点的和求解时间为O(n),注意数据大小要long long 类型。 #include<bits/stdc++.h> using 阅读全文
posted @ 2022-03-07 08:49 心悟&&星际 阅读(118) 评论(0) 推荐(0) 编辑
摘要:P1115 最大子段和 /* P1115 最大子段和 */ #include<cstdio> #include<iostream> using namespace std; int main() { // freopen("p1115_2.in","r",stdin); int ans; int s 阅读全文
posted @ 2022-03-07 08:44 心悟&&星际 阅读(36) 评论(0) 推荐(0) 编辑
摘要:差分数组差分数组就是原数组对应项和它前面那项的差值 。来看一个例子:原数组 a:5,8,4,3,15差分数组 b:5,3,-4,-1,12还是先来看例子:原数组:a:5,8,4,3,15它的前缀和数组:c:5,13,17,20,35它的差分数组:b:5,3,4,1,12它的差分前缀和(就是差分数组的 阅读全文
posted @ 2022-03-06 22:25 心悟&&星际 阅读(99) 评论(1) 推荐(0) 编辑
摘要:前缀和是一种重要的预处理,能大大降低查询的时间复杂度。最简单的一道题就是给定 n 个数和 m 次询问,每次询问一段区间的和。求一个 O(n + m) 的做法。用 O(n) 前缀和预处理,O(m) 询问。一、一维前缀和主要代码 for(int i = 1; i <= n; ++i) sum[i] = 阅读全文
posted @ 2022-03-06 21:40 心悟&&星际 阅读(50) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示