表舅 线段 标记

算法学习笔记(33): 矩阵乘法与线段树标记

矩阵乘法与线段树标记 让我们回归本质,将一切线性操作归为矩阵。 目录矩阵乘法与线段树标记线段树区间加线段树历史版本和线段树历史版本最大/最小值线段树区间取 \(\min\) 与历史版本最大NOIP2022 比赛优化标记常数关于向量构造的一些小技巧作者有话说 线段树的懒标记是非常普遍且巧妙的,但是对于 ......
线段 乘法 矩阵 算法 标记

P2251 质量检测(分块线段树RMQ单调队列)

P2251 质量检测 正解应该是ST表和单调队列,不过对于这道题来说只有查询没有修改,这里我还是想用线段树和分块来写,不得不说分块是真好,优雅的暴力 线段树版本: #include <bits/stdc++.h> #define LL long long using namespace std; c ......
线段 队列 质量检测 质量 P2251

线段与圆是否相交

一个点在圆内 两个点都在圆内 两个点都在圆外 public static bool IsSegmentCircleIntersect(Vector2 p1, Vector2 p2, Vector2 center, float r) { float sqrR = r * r; //1) 一个点在圆内, ......
线段

点是否在线段两侧

不在两侧时 在两侧时 //点是否在线段两侧 public static bool IsPointSideOfLine(Vector2 p, Vector2 a, Vector2 b) { var ap = p - a; var ab = b - a; if (Vector2.Dot(ap, ab) ......
线段

F. Unique Occurrences(线段树分治+可撤销并查集)

F. Unique Occurrences 假如我们删除所有权值为x的边,那么所有权值为x的边对答案的贡献就是 \(\sum sz[u]*sz[v]\) sz表示两个联通块的大小,且(u,v)的边权为x 我们可以用可撤销并查集来进行处理,简单来说就是将一条边的存在时间看作区间,然后挂到线段树上,然后 ......
线段 Occurrences Unique

线段树专题

线段树专题 (该笔记持续更新中...) 一、基本操作 1.单点修改/查询: 2.区间修改/查询: 需要用到 lazy_tag 技术,即每次修改不会立刻修改涉及到的每一段区间,而是等到下一次修改要用到或者是要查询该区间时再更新,这样可以将每次修改和查询的复杂度控制在 \(O(log_2N)\) 3.总 ......
线段 专题

线段树二分

修改操作可以很简单的在线段树上打标记即可。 常规做法直接二分 R 然后区间查询 gcd,复杂度是仨log。 upded:其实也是俩log,线段树查询区间gcd是单 log。 注意到你会将区间拆分成 log 个子区间,直接查询他们的 gcd 即可,直接查询为什么不会多乘个 log 呢。 注意到对两个数 ......
线段

第 116 场双周赛(双指针,背包问题,线段树+lz标记)

本题为双指针和贪心。当我们遇到奇数个0或1时,直接将下一位改变即可。 class Solution { public: int minChanges(string s) { int n = s.size(); int res = 0; int l = 0, r = -1; while(r ++ < ......
线段 指针 背包 标记 问题

2021 CCPC桂林 B.A Plus B Problem (线段树)

传送门 线段树大模拟!。考验线段树功底的时候来了,作为队伍的史山选手,写这么史也是情有可原的。 #include <bits/stdc++.h> using ll = long long; const int INF = 0x3f3f3f3f; const int N = 1e6 + 10; typ ......
线段 Problem 2021 CCPC Plus

关于线段树区间最值问题的复杂度证明

定义函数 \(\Phi(T)\) 为当前树 \(T\) 中不同数的数量,易证明上限为 \(|T|\)。并规定整棵线段树的大小 \(= n\)。 我们再定义一个概念:对于一个线段树节点,如果它对应的区间包含于 \(\min\) 操作的区间 \([l, r]\),且它的祖先不包含于 \([l, r]\) ......
复杂度 线段 区间 问题

李超线段树

P4097 【模板】李超线段树 / [HEOI2013] Segment 强制在线,那么这种问题该如何解决? 我们可以把任务转化为维护如下操作: 加入一个一次函数 给定 \(k\),求定义域包含 \(k\) 的所有一次函数中,在 \(k\) 处取值最大的那个,如果有多个函数取值相同,选编号最小的。 ......
线段

可持久化线段树学习笔记

主席树的定义 主席树,也称可持久化线段树,什么是可持久化线段树呢,即为一颗记录了所有更新过程的线段树。能够处理出从第 $i$ 次更新到第 $j$ 次更新的线段树变化。 前置知识 值域线段树 值域线段树的区间存的并不是节点信息,而是在值在某一范围内的数的个数。 如图就是一棵值域线段树。 1号节点存储的 ......
线段 笔记

java项目树出现了红色时针标记,run mian方法时无反应

java的左侧项目树出现了红色的时针标记, 导致java类的代码中String 、System等关键字出现红色错误, 解决办法, 右键src--mark directory as --source root,即可 后续问题:run mian方法时无反应 逻辑、配置等都没问题,就是死活没反应。看来一堆 ......
时针 标记 红色 方法 项目

P5537 【XR-3】系统设计 题解-哈希+线段树二分

20231026 P5537 【XR-3】系统设计 题解-哈希+线段树二分 这个东西怎么会和哈希有关?!直接寄。 Statement 这个系统首先需要输入一棵 \(n\) 个点的有根树和一个长度为 \(m\) 的序列 \(a\),接下来需要实现 \(q\) 个操作。 操作分两种: 1 x l r 表 ......
线段 题解 系统 P5537 5537

P3870 [TJOI2009] 开关(线段树)

P3870 [TJOI2009] 开关 思路:可以用线段树来维护区间中亮灯的个数,区间修改用加上懒标记就好 #include <bits/stdc++.h> #define LL long long using namespace std; const int N = 1e5 + 10; struc ......
线段 P3870 3870 2009 TJOI

线段树分治

猫树 猫树 线段树分治 ......
线段

算法笔记(1)线段树

原发表于个人博客。 前言 线段树,是数据结构皇冠上的明珠(我编的)。 它用途广泛,被一代代的oier应用,改进,优化。 本文介绍了线段树的基础知识和各种拓展(包括权值线段树,可持久化线段树),各种优化方式(包括zkw线段树,动态开点,离散化),希望能帮到更多的oier。 在学习线段树前,默认你应该学 ......
线段 算法 笔记

【学习笔记】线段树合并

前置知识:动态开点权值线段树。 线段树合并,顾名思义,就是将两棵权值线段树合并在一起。为什么不把两棵普通的线段树合并呢?因为那样好像没啥用。 我们知道,权值线段树支持着查询某个数的个数、查询第 \(k\) 大/小的数等操作,有了合并操作之后就可能会支持一些令人意想不到的操作。 放张图,可以帮助理解下 ......
线段 笔记

线段是否相交

快速排斥 快速排除不可能相交的情况 1 2 3, 4 但类似下面这类情况,矩形区域相交,但线段没相交的就无法处理了 跨立实验 若两线段相交,则两线段必须跨立。就是:线段a1a2与线段b1b2相交,则a1和a2一定在线段b1b2的两侧。 2d向量叉乘v1×v2,可以用来判断v2在v1的右手逆时针180 ......
线段

算法学习笔记(31): 李超线段树

李超线段树是一种按照值域维护一次函数最值的数据结构,其核心在于一次函数和值域的双单调性。 如果预先对于值域离散也可以维护其最值。 也就是说只要满足时一次函数,以及下标的单调性都可以利用李超线段树维护。 李超线段树就是利用线段树来维护一次函数的最值,每一个结点对应了一个区间 \([l, r]\)。 我 ......
线段 算法 笔记 31

962. 最大宽度坡(权值线段树, 权值树状数组)

本题要快速找到某个数字在数组中左边<=它的数的最小下标。 可以建立一个权值线段树,nums[i]处维护最小下标。 class Solution { public: const static int N = 50010, INF = 0x3f3f3f3f; struct Node { int l, r ......
线段 数组 宽度 962

点到线段的距离

情况1 情况2 情况3 情况4 public static float PointToLineSegmentDistance(Vector2 P, Vector2 A, Vector2 B) { float a = Vector2.Distance(A, B); float b = Vector2. ......
线段 点到

【学习笔记】可持久化线段树基础

点击查看目录 目录前言概念实现例题:Tower Defense标记永久化 前言 参考资料:oi-wiki 前置知识: 线段树基本操作 动态开点线段树 概念 可持久化线段树,又称主席树。 (事实上,据说,主席树应该是可持久化线段树的一个子集,主席树应该是单纯的针对静态查询第 \(k\) 小的问题,但是 ......
线段 基础 笔记

线段树练习

习题都来自董老师的博客和b站: Luogu P4198 楼房重建 其实这道题的思路肯定是用线段树,但是为了计算结果线段树需要维护哪些信息?//mx表示区间内的最大斜率,sum表示区间内可见的,主要就是递归求出sum #include<iostream> #include<cstdio> #inclu ......
线段

线段树模板

线段树理解起来不难,主要是书写起来比较麻烦 这里学的是董晓老师的线段树模板 #include<bits/stdc++.h> using namespace std; #define lc p<<1 #define rc p<<1|1 #define N 500005 int n,w[N]; stru ......
线段 模板

【PRC】鲁棒跨域伪标记和对比学习的无监督域自适应NIR-VIS人脸识别 Robust Cross-Domain Pseudo-Labeling and Contrastive Learning for Unsupervised Domain Adaptation NIR-VIS Face Recognition

【该文章为杨学长的文章,膜拜】 探索跨领域数据中的内在关系并学习领域不变表示 由于需要在低光照条件下实现24h的人脸识别,近红外加可见光的(NIR-VIS)人脸识别受到了更多的关注。但是数据标注是一个难点。该文章提出了Robust crossdomain Pseudo-labeling and Co ......

*【学习笔记】(7) 线段树及高级用法

一.普通线段树 线段树(Segment Tree)几乎是算法竞赛最常用的数据结构了,它主要用于维护区间信息(要求满足结合律)。与树状数组相比,它可以实现 \(O(logn)\) 的区间修改,还可以同时支持多种操作(加、乘),更具通用性。 接下来我们用这道模板题为例,看看线段树是怎么维护区间和这一信息 ......
线段 笔记

c++ 线段树模板

洛谷模板:P3372 【线段树1】 #include <bits/stdc++.h> #define int long long using namespace std; const int N = 1e5 + 10; int a[N], d[N << 2], b[N << 2]; int n, q ......
线段 模板

线段树高阶学习指南

前置芝士 线段树基本框架 区间求和 const int N=100010; ll a[N],st[N*4],f[N*4]; int n,q; //向上传 void pushup(ll u){ st[u]=st[lc]+st[rc]; } //向下传 void pushdown(ll u,ll l,l ......
线段 学习指南 高阶 指南

线段树合并

P4556 [Vani有约会] 雨天的尾巴 /【模板】线段树合并 有 \(n(n≤10^5)\) 个点,形成树状结构。 有 \(m(m≤10^5)\) 次发放操作,每次选择两个点 \(x,y\) ,对 \(x\) 到 \(y\) 的路径上(包括 \(x,y\))的每个点发放一个 \(z(z≤10^5 ......
线段