线段树
crazy morning
去西之西处,驾驭长风
展开
-
P7837 「Wdoi-3」夜雀 cooking
题目题目思路看见交互一般有2个结论:1.二分2.分块很好,这题综合了2个结论……由于完全随机,所以把n个人分出nmn\over mmn个块,每个块期望有1个人特殊。接下来需要发现性质:如有:al+al+1>ara_l+a_{l+1}>a_ral+al+1>ar,我们可以通过查询区间蓝色和来确认是否只有一个紫,而不是就可以对区间二分递归。al+al+1>ara_l+a_{l+1}>a_ral+al+1>ar这个条件显然在除第1块外都成立。所原创 2021-08-23 21:00:14 · 161 阅读 · 0 评论 -
P7293 [USACO21JAN] Sum of Distances P
题目题目思路比赛时根本没思路,结果居然是个神奇计数+奇偶最短路!?题目可以分成2个部分:求最短路和求规定点的方案数。发现对于题目要求的到(j0,…,jk)(j_0,…,j_k)(j0,…,jk)的路径,其实是在iii图到jij_iji的最短路中最长奇路和最长偶路的最小值。设到jij_iji的偶路的贡献记做oddjiodd_{j_i}oddji,奇路的贡献记做evenjieven_{j_i}evenji,那么答案可以表示为min(max(oddji),max(evenj,i))=m原创 2021-08-17 20:20:06 · 89 阅读 · 0 评论 -
P3987 我永远喜欢珂朵莉~
题目题目思路Ynoi的题居然不是分块??本题是大学的弱化版但鄙人的代码被大学卡掉了但是这题还是过得去的显然暴力过不去这不废话嘛所以我们考虑用另一种做法来表示下标。考虑对所有数的因数分别开一个vector(平衡树也可以,但是……长而且难打,所以这题算是C党福利?)存a中可以被整除的下标,然后每次修改就从这里截取一段出来修改,然后除完还可以被整除的再放回去。但也有一种情况:16/4=4,这里除完就不能被8整除了,所以我们维护时还要再考虑现在能不能除,能除再考虑。然后用线段树维护区间和就好。原创 2021-06-05 11:39:24 · 95 阅读 · 0 评论 -
P3130 [USACO15DEC]haybalesCounting Haybale P
题目题目思路大型板子题(线段树区间最小+区间和)记得开long longcode:#include<iostream>#include<cstdio>#include<algorithm>#include<cmath>#include<cstring> using namespace std;long long n,f,x,L,R;char u;long long tree[200005*4],lazy[200005*4原创 2021-04-28 21:21:29 · 110 阅读 · 0 评论 -
P2184 贪婪大陆
题目题目思路我们考虑把起点和终点分开存,让查询区间终点前的起点与查询区间起点前的终点做差即可。code:#include<iostream>#include<cstdio>#include<algorithm>#include<cmath>#include<cstring> using namespace std;int u,n,f,x,L,R;struct f{ int tree[4000008],lazy[400000原创 2021-04-28 21:19:56 · 68 阅读 · 0 评论 -
P4513 小白逛公园
题目题目思路修改+查询,是线段树没错了我们对普通线段树进行扩展,扩成4部分:最大子段和,一定包含第一位的最大子段和,一定包含最后一位的最大子段和,还有本段和。修改显然code:#include<iostream>#include<cstdio>#include<algorithm>#include<cmath>#include<cstring>using namespace std;int n,f,a[1000004],x原创 2021-04-28 19:41:54 · 73 阅读 · 0 评论 -
P6327 区间加区间sin和
题目题目思路根据数学知识,有:sin(x)+sin(y)=cos(x)sin(y)+cos(y)sin(x)sin(x)+sin(y)=cos(x)sin(y)+cos(y)sin(x)sin(x)+sin(y)=cos(x)sin(y)+cos(y)sin(x),cos(x)+cos(y)=cos(x)cos(y)−sin(y)sin(x)cos(x)+cos(y)=cos(x)cos(y)-sin(y)sin(x)cos(x)+cos(y)=cos(x)cos(y)−sin(y)sin(x)原创 2021-02-16 11:35:05 · 77 阅读 · 0 评论 -
P3373 【模板】线段树 2
题目题目思路其实我们从这里就可以完成操作2,3,重点就在操作1.对于区间乘,我们发现只有一个lazy是不够的,我们还需要一个lazy2,用来处理乘法,详见代码(汉语拼音函数名见谅)code:#include<iostream>#include<cstdio>#include<algorithm>#include<cmath>#include<cstring>using namespace std;long long tre原创 2021-02-05 11:06:44 · 51 阅读 · 0 评论 -
P2357 守墓人
题目题目思路其实,这道题就是线段树的板子题,它要求我们维护一个数据结构,它支持区间修改,单点修改,区间查询,单点查询。其实,单点的操作相当于一个区间为[1,1]的区间操作,所以,它就是线段树的模板题目code:#include<iostream>#include<cstdio>#include<algorithm>#include<cmath>#include<cstring>using namespace std;long原创 2021-02-04 13:36:55 · 175 阅读 · 0 评论 -
P3919 【模板】可持久化线段树 1(可持久化数组)
题目题目思路显然这是个模板,我们保存每一个版本的树,显然不能直接复制整棵树,但是我们有能力复制logn个节点,其实仔细想想,就会发现我们可以把每一个更新出的节点保存,但是,这样我们就会发现,一个点有多个父亲,没关系,我们存一下父亲坐标就行了code:#include<iostream>using namespace std;int n,m,gen[1000001],a[1000001],tot,z,x,we,y;struct f{ int l,r,id;} b[2000000原创 2021-02-04 13:33:51 · 152 阅读 · 1 评论