树状数组和线段树
文章平均质量分 51
枫茗、
HELLO,WORLD!
展开
-
亚特兰蒂斯--扫描线
将所有的y坐标保存到一个vector中,然后离散化,在线段树中每个点都代表一个线段,比如1代表[y1,y2],2代表[y2,y3],[1,4]代表[y1,y5]都被覆盖了,n个点对应n-1个线段,建树时建立build(1,0,n-2)或build(1,1,n-1)进行修改时,当一个结点被覆盖次数大于1,该节点对应区间被覆盖的长度就是它所对应的长度,当它为覆盖次数为0,该节点对应区间被覆盖的长度为它左孩子被覆盖的长度加右孩子被覆盖的长度,如果是叶子节点的覆盖次数为0,他对赢得被覆盖的长度就是0。.......原创 2022-07-28 12:23:31 · 354 阅读 · 0 评论 -
Eyjafjalla--牛客多校第9场--dfs序+线段树+倍增
题目链接:Eyjafjalla题意:代码:#include <bits/stdc++.h>using namespace std;const int N=1e5+10;const int M=2*N;const int inf=1e9+10;int n,q;typedef struct Node{ int l,r,mi,ma;}Node;Node tr[N*4];int w[N],t[N];int h[N],to[M],ne[M],cnt;in.原创 2022-05-23 10:56:17 · 154 阅读 · 0 评论 -
Mayor‘s posters--区间覆盖
题目链接:2528 -- Mayor's posters题意:n(n<=10000)个人依次贴海报,给出每张海报所贴的范围li,ri(1<=li<=ri<=10000000)。求出最后还能看见多少张海报。第一行:样例个数T第二行:贴海报的人n第三行:每个人贴海报的范围接下来n行:每个人贴海报的范围代码:#include <cstdio>#include <iostream>#include <algo...原创 2022-04-16 17:20:19 · 426 阅读 · 0 评论 -
「雅礼集训」市场--势能线段树
题目链接:https://loj.ac/p/6029题意:思路:势能时间分析:每次除数至少为2,所以一个数最多除log次,log次操作后一个区间就会相等,加法又需要log次使区间相等,所以使n个区间相等的复杂度是区间除操作转化为区间减操作,当区间内最大值除完后与最小值除完后减小量相等,中间的数除完减小量也相等,相当于整个区间减少一样的值。直接整数除不等于负数向下取整,要用floor((double)x/y)函数。在计算减小量时,不要封装成一个函数去调用返回计算,TL...原创 2022-04-16 16:56:10 · 371 阅读 · 0 评论 -
Euler Function--网络赛第二场(势能线段树)
题目链接:PTA | 程序设计类实验辅助教学平台题意:给定一个长度为n的数组x,有m次操作,操作有两种,操作0是让区间[l,r]内的数加上x,操作1是输出[l,r]区间内的(x的欧拉函数值)的和。输入第一行给n,m,第二行给出,接下来m行是m次操作。样例:输入5 51 2 3 4 51 1 50 1 3 21 1 50 2 5 61 1 5输出101137代码:#include<bits/stdc++.h>using ..原创 2022-04-16 10:31:49 · 221 阅读 · 0 评论 -
李超线段树
题目:平面空间中有若干条直线,每条直线的方程可以写作,现在智乃酱有两个操作。插入一条方程为的直线。 给定一个正整数x, x∈[1,N],查询现在所有直线中令x=x′时,y′的最大值和最小值。代码:#include<bits/stdc++.h>using namespace std;const int MAXN=1000005;struct Lin{ long long k,b; long long val(long long x) {原创 2022-04-15 21:41:25 · 141 阅读 · 0 评论 -
树上路径--树链剖分+线段树 维护两两相乘和
题目链接:树上路径题意:给出一个n个点的树,1号节点为根节点,每个点有一个权值你需要支持以下操作。1.将以u为根的子树内节点(包括u)的权值加val2.将(u, v)路径上的节点权值加val3.询问(u, v)路径上节点的权值两两相乘的和思路:树链剖分完建立线段树去维护连续区间第一个操作就是树链剖分完之后修改L[u]到R[u]的权值第二个操作就是采用轻重剖分完找LCA的思想,每次修改区间[id[top[u]],id[u]](u为深度大的点),修改完后u=fa[top[原创 2022-04-15 15:49:09 · 354 阅读 · 0 评论 -
区间最大公约数--线段树+树状数组
题目链接246. 区间最大公约数 - AcWing题库思路:①首先要知道由更相减损法我们可得,gcd(a,b,c,d,...)=gcd(a,b-a,c-b,d-c,...)那么我们便可用线段树维护差分序列的gcd,查询区间[l,r]的gcd时就等于gcd(a[l],query(l+1,r))。对于区间[l,r]加上k,对于差分序列而言,相当于d[l]+k,而d[r+1]-k,直接线段树单点修改就可以。用树状数组维护区间[l,r]加k后每个数相对于原来的偏移,查询时a[l]实际等于a[原创 2022-04-14 20:32:44 · 183 阅读 · 0 评论 -
势能线段树模板题
题目链接:C-势能线段树模板题二_牛客竞赛数据结构专题班势能线段树、李超线段树 (nowcoder.com)题意:样例:输入10 310 10 10 10 10 10 10 10 10 101 1 52 1 10 53 1 10输出115代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;const int N=2e5+10;typede.原创 2022-04-14 11:30:18 · 992 阅读 · 0 评论 -
线段树--求区间两两乘积
题目链接链接:线段树题意:现在给你一串数字,a1,a2,a3…an,你需要进行m次如下几种操作:1 l r v,区间a[l]到a[r]的所有数字全部加v。2 l r v,区间a[l]到a[r]的所有数字全部乘v。3 l r,求区间a[l]到a[r]之间两两之间数字的乘积和(例如:2,3,4,5两两之间乘积和为 2*3+2*4+2*5+3*4+3*5+4*5)现在给出你操作的顺序,按照要求操作或者输出。对区间维护 lazy维护 进行修改后xax+b,维护a,b。..原创 2022-04-14 11:18:10 · 682 阅读 · 0 评论 -
[HEOI2012]采花--思维(区间种类问题变种)
题意:给定n朵花,第i朵花对应颜色a[i],有m次询问,每次询问[l,r]之间可以采到的花的颜色数。(采花时,如果采花区间内某种颜色的花只有1多,这朵花是不采的)数据范围: 思路:项链问题的变种...原创 2022-04-12 14:16:34 · 98 阅读 · 0 评论 -
HH的项链--思维(查询区间种类数)
题意:给定一串长度为n的贝壳项链,第i个贝壳对应颜色a[i],m次询问,每次询问[l,r]内有多少种颜色不同的贝壳。思路:我们固定右端点考虑贝壳的贡献,比如下面这个例子,当我们固定r=6时,[2,6]的种类数即为[2,6]的区间和。pos 1 2 3 4 5 6 7 贝壳颜色 2 1 3 1 3 4 5 贡献 1 0 0 1 1 1 我们怎样维护这样一个原创 2022-04-12 11:16:54 · 148 阅读 · 0 评论