线段tjoi 2007

树状数组和线段树

树状数组: 1.将某一个数加上k 2.求出某区间每一个数的和 #include<bits/stdc++.h> using namespace std; typedef long long ll; ll n,m,a[500000+10]; ll lowbit(ll x){return x&(-x);} ......
线段 数组

算法学习笔记(43): 可持久化线段树 - 区间加!

可持久化线段树 也叫做主席树,单点修改时简单,使用空间 \(O(\log n)\),问题在于如何区间加。 区间覆盖可以做,但是似乎只能单点查? 所以我们需要引入标记永久化的概念。 一个标记在没有下放前会放在 \(O(\log n)\) 个点上,这覆盖了整个操作区间。 一般来说我们会 update 更 ......
线段 区间 算法 笔记 43

线段树优化建图

CF786B 题意: 定义 \((u,v,w)\) 表示 \(u\) 向 \(v\) 连了边权为 \(w\) 的边。 有三种连边操作 \((u,v,w)\) \(\forall i\in [l,r],(u,i,w)\) \(\forall i\in [l,r],(i,u,w)\) 求最短路。 暴力加 ......
线段

交点 - 求两线段交点2

效果 会用到的知识 相交 - 两线段是否相交 - yanghui01 - 博客园 (cnblogs.com) 线性代数 - 已知点求直线方程 - yanghui01 - 博客园 (cnblogs.com) 交点 - 两直线交点 - yanghui01 - 博客园 (cnblogs.com) //两线 ......
交点 线段

「线段树」笔记

基础 建树 void build(int p, int l, int r) { t[p] = (tree){l, r, 0}; if (l == r) { t[p].sum = val[l]; return; } int mid = (l + r) >> 1; build(lp, l, mid); ......
线段 笔记

【模板】可持久化线段树 2

【模板】可持久化线段树 2 题目背景 这是个非常经典的可持久化权值线段树入门题——静态区间第 $k$ 小。 数据已经过加强,请使用可持久化权值线段树。同时请注意常数优化。 题目描述 如题,给定 $n$ 个整数构成的序列 $a$,将对于指定的闭区间 $[l, r]$ 查询其区间内的第 $k$ 小值。 ......
线段 模板

loj144&145 dfs序+树状数组/线段树

[https://loj.ac/p/144](loj144) [https://loj.ac/p/145](loj145) 两题非常相似,一题的权值修改是在点上的,一题的权值修改是在整棵子树上的。 首先我们要了解dfs序,并记录每个节点的子树大小sz,对于一个节点,在dfs序上sz长的区间全都是他的 ......
线段 数组 loj 144 amp

【模板】线段树1(洛谷P3372)

1 #include <iostream> 2 #include <cstdio> 3 4 using namespace std; 5 6 template <class T> 7 inline void read(T &s) 8 { 9 s = 0; 10 int w = 1; 11 char ......
线段 模板 P3372 3372

可视化学习:利用向量计算点到线段的距离并展示

向量运算是计算机图形学的基础,这个例子就是向量的一种应用,是利用向量来计算点到线段的距离,这个例子中可视化的展示采用Canvas2D来实现 ......
线段 向量 点到

IOI 2007 Pairs

IOI 2007 Pairs 可以考虑三个情况: 若B=1: 这其实好像没什么好说的?lower_bound就可以轻轻松松30分 code: void solve1(){ for(int i=0;i<N;i++){ std::cin>>a[i]; } sort(a,a+N); i64 ans=0; ......
Pairs 2007 IOI

【线段树优化 dp】AT_dp_w Intervals 题解

AT_dp_w 先不看数据范围,考虑 dp。 令 \(f_i\) 表示前 \(i\) 个字符且强制第 \(i\) 个字符为 \(1\) 的最大分数。 则 \(f_i = \max(f_{j - 1} +\sum\limits_{r_k\ge i\ge l_k\ge j}a_k)\)。 这个是一份 \ ......
线段 题解 Intervals AT_dp_w AT

线段树好题汇总(持续更新中)

线段树作为信息竞赛中最为常用的数据结构之一, 常常是区分非竞赛选手和竞赛选手的显著标志 其中最为有趣的就是有关区间可加性的探讨, 这里将会放一些我自认为可以学到东西的线段树题目, 同时也会附赠上自己的一些思考, 助读者加深对线段树的理解 Educational Codeforces Round 23 ......
线段

P4170 [CQOI2007] 涂色

P4170 [CQOI2007] 涂色 基本思路 很容易口胡一个状态。 \(F_{l,r}\) 表示 \(ch_l\) 到 \(ch_r\) 的最小操作次数。 然而转移就开始满头大汗。 状态转移 只想到 \(F_{i,i} = 1\) 以及肯定有 \(F_{l,r} = \min(F_{l,r}, ......
P4170 4170 2007 CQOI

第 372 场周赛(位运算技巧,跳表 + 二分,线段树)

class Solution: def findMinimumOperations(self, s1: str, s2: str, s3: str) -> int: cnt = 0 for a, b, c in zip(s1, s2, s3): if not a == b == c: break c ......
线段 技巧 372

[SHOI2007] 园丁的烦恼

[SHOI2007] 园丁的烦恼 题目背景 很久很久以前,在遥远的大陆上有一个美丽的国家。统治着这个美丽国家的国王是一个园艺爱好者,在他的皇家花园里种植着各种奇花异草。 有一天国王漫步在花园里,若有所思,他问一个园丁道: “最近我在思索一个问题,如果我们把花坛摆成六个六角形,那么……” “那么本质上 ......
SHOI 2007

[学习笔记]主席树(可持久化权值线段树)

注:本蒟蒻第一次用 html 写文章,可能写的不是很好 主席树简介 主席树,全称为可持久化权值线段树。 有的人不知道什么是可持久化,其实很好理解,就是某个 mhy 游戏最早是 1.0 版本,至今到了 4.2 版本,可持久化就是可以在 1.0 ~ 4.2 版本间任选一个版本出来进行修改。 例题1 P3 ......
线段 主席 笔记

P1098 [NOIP2007 提高组] 字符串的展开(总结)

P1098 [NOIP2007 提高组] 字符串的展开http://ww.luogu.com.cn/problem/P1098 注意 字符中的数字是默认小于字母的。 所以要对数字做特判。 #include <iostream> #include <string> using namespace st ......
字符串 字符 P1098 1098 NOIP

线段树-多个懒标记pushdown

P3373 【模板】线段树 2 这里需要用到两个懒标记,一个懒标记为add,记录加,另一个懒标记为mul,记录乘。 我们需要规定一个优先级,然后考虑如何将懒标记下传。 这里无非有两种顺序,一种是先乘后加,另一种是先加后乘。 我们先看先加后乘。 \[(sum + add1) * mul1 \]当我们的 ......
线段 标记 pushdown 多个

abc327F - Apples(线段树)

https://atcoder.jp/contests/abc327/tasks/abc327_f 我们将时间看作x轴,位置看作y轴,那么我们随着时间增加,维护新加的点对区间的贡献,同时减去过时的点,线段树区间加法维护最大值即可。 #include<cstdio> #include<algorith ......
线段 Apples 327F abc 327

JS判断点是否在线段上

本文利用向量的点积和叉积来判断点是否在线段上。 基础知识补充 从零开始的高中数学——向量、向量的点积、带你一次搞懂点积(内积)、叉积(外积)、Unity游戏开发——向量运算(点乘和叉乘 说明 点积可以用来判断两个向量的夹角,如果这个夹角是0或者180度,说明这个点在直线上; 叉积可以用来判断一个点到 ......
线段

IOI 2007 Miners

三种食物,两个矿地。 每个矿地会记得最靠近的三种食物, 每一次给他们一个新的食物时,答案会加上有多个不同的食物。 求答案的最大值。 很简单的dp: dp[i][a1][a2][b1][b2] 表示当前已经分了i个食物, a的上两个食物为a1,a2,b的上两个食物为b1,b2。 那么转移状态为: 让s ......
Miners 2007 IOI

P1129 [ZJOI2007] 矩阵游戏

挺喜欢的一题。 首先我们很容易观察到一个性质:每一行和每一列上的黑色方格的数量是不变的,只能改变它在那一行和那一列的排列顺序。由此若是有某一行或某一列上没有黑色方格,直接输出 No 即可。此时我们考虑的情况就是每一行和每一列上至少都会有一个黑色方格。 这时有一个结论:若有解我们可以仅通过交换行来达成 ......
矩阵 P1129 1129 2007 ZJOI

李超线段树

极其BT的东西,又卡精度又卡边界情况,代码还异常长(依托答辩)。 解决问题 给出一堆线段或直线(\(log^2\) 或 \(log\) 复杂度),问某个 \(x\) 坐标上最高的线。可以搭配 \(DP\) 进行转移上的优化,常见模型为 \(n^2\) 的 \(f_u=min(a_u\times a_ ......
线段

线段树

线段树引入遇到过好多次线段树的题目,要么就是用其他的方法去解决,要么就是不会写!!今天痛定思痛,决定好好归纳整理一下线段树 线段树解决的是「区间和」的问题,且该「区间」会被修改 什么意思呢?举个简单的例子,对于 nums = [1, 2, 3, 4, 5] 如果我们需要多次求某些区间的和,是不是首先 ......
线段

理解线段树和主席树:解决区间操作的利器

在计算机科学和算法领域,区间操作问题是一类常见且重要的问题,它们涉及到在一维数据结构中执行查询和更新操作。线段树和主席树是两种用于解决这类问题的强大数据结构。本文将介绍这两种树状数据结构,以及它们在不同应用领域中的使用。 什么是线段树? 线段树是一种用于处理区间操作问题的数据结构,它的核心思想是将一 ......
线段 区间 利器 主席

原点到线段的垂足

原理: 1) 求出向量ao在ab上的投影距离 2) a沿着ab方向移动投影距离就是垂足点的位置 // 获得原点到直线ab的垂点 public static Vector2 GetPerpendicularToOrigin(Vector2 a, Vector2 b) { var ab = b - a; ......
线段 原点

线段树历史值

P6242 【模板】线段树 3 支持区间加,区间取 \(\min\),区间求和,区间 \(\max\),区间历史 \(\max\)。 先提一嘴吉司机。 就是对线段树的每个节点记录最大值,严格次大值和最大值个数,只在 \(se<v<mx\) 的区间操作,否则向下递归。如果没有区间加,复杂度势能分析是 ......
线段 历史

从[SDOI2011]消防 到[NOIP2007]树网的核

应该都和我一样一下水了两题吧 P2491 [SDOI2011] 消防 P1099 [NOIP2007 提高组] 树网的核 题目描述 在一颗 \(n\) 个节点的无根树中,找到一条不超过 \(s\) 的路径,使得图中所有点到此路径距离的最大值最小,图中边权非负 分析 若想将此题转化到树网的核,首先要证 ......
SDOI 2011 2007 NOIP

Exhausted? 题解(线段树)

Exhausted? 题解 前言: 看本篇题解,您如果想要掌握所有知识点的话,请您先去了解下什么是霍尔定理,当然如果可以的话,可以去看看我的这个博客。 涉及的算法和思想知识点: 线段树、扫描线。 霍尔定理。 较少的容斥原理。 正文: 理论分析: 从简单入手:我们想想,要是值域再小一点的话,我们可以怎 ......
线段 题解 Exhausted

线段树合并

空间复杂度,一般是根据操作次数来计算的,或者按照题目的空间,算出最大开多少数组。 根据感性理解,线段树的深度是\(\lceil log_2n\rceil\)的,反正\(d = \lfloor log_2n\rfloor+1\)肯定够。 那\(m\)次操作,注意这个操作不一定是原题中的询问,而是你对于 ......
线段