线段459579152 zhuanlan atcoder

关于线段树

动态开点 当到了未建立过的新点时再建立点,一般用结构体来存储线段树。 大致代码: #define lx tree[x].l #define rx tree[x].r #define mid ((l + r) >> 1) int cnt; struct node{ int l, r; int v; } ......
线段

线段树学习笔记

学习链接 代码(未完成) #include<bits/std++.h> using namespace std; int array[200005],tree[200005<<2]; // array是初始数组,tree是线段树 void update(int item) // 更新 item 号节 ......
线段 笔记

笔记——线段树

蓝月の笔记——线段树篇 在树状数组中,我们讲解了关于单点修改区间查询的操作。今天,我们要讲一种更加高级的数据结构,他解决的是区间修改区间查询的问题多了一个区间当然更高级啦。 这个数据结构就是——线段树 Luogu - P3372 给定一个长度为 \(n\) 的序列 \(a_1,a_2,\cdots, ......
线段 笔记

线段树模板

应该是做的最认真的模板了。。。 namespace xds{ template<class T,const int MYMAXSIZE,T (*fun)(T a,T b)> class STree{ private: T t[MYMAXSIZE<<2],tag[MYMAXSIZE<<2],a[MYM ......
线段 模板

【数据结构】- 线段树

线段树 简介 线段树是可以维护 区间信息 的数据结构。线段树将每个长度不为 \(1\) 的区间划分成左右两个区间递归求解,故把整个线段划分为一个树形结构,通过合并左右两区间信息来求得该区间的信息。 根据建树方式可分为普通线段树和动态开点线段树。 根据区间信息可分为普通线段树、权值线段树和李超线段树。 ......
线段 数据结构 结构 数据

note 线段树

适用场景:不断区间修改、区间询问。 假设我们要区间求和,\(tree\) 的含义:区间的和,其两个子节点为这个区间分为两半的和。 我们把一个数组 \(a\) 看作一颗树 \(tree\),例: 1 1 2 3 3 3 对应的 \(tree\)(\(()\)里是编号,\([]\)里是对应的区间): ( ......
线段 note

线段树专题复习

今天的主题是线段树专题复习! (什么?是昨天的?不听不听,只要我不说都不知道我鸽了一天!) 好了,言归正传,我们来看一下今天的知识点们吧。 Part 1 线段树自己 不想讲了,想看的移步其他博客 想看踢我,今天没时间了 Part 2 一些优化 ZKW线段树 俗称重口味线段树,是一种不用递归实现的线段 ......
线段 专题

线段树

前言: 继树状数组,一年后,kkk05终于决定把它的好兄弟——线段树附上。(明明一年前就学了但是今天才写的屑) 先简单地引入一下:P3372 忽略这道题的标题,看到这道题的第一想法大约是一维数组+m个循环+输出,照着这个思路写下去,不出意外的话,你将获得TLE。这时我们就该抬头看看标题:哦,什么是线 ......
线段

AtCoder Grand Contest 036 F Square Constraints

洛谷传送门 AtCoder 传送门 本质是 \(p_i \in [l_i, r_i]\) 的计数问题。 当 \(1 \le i \le n\) 时,\(l_i\) 才可能不等于 \(1\)。考虑容斥,设钦定 \(m\) 个不满足条件(上界为 \(l_i - 1\)),其余任意(上界为 \(r_i\) ......
Constraints AtCoder Contest Square Grand

AtCoder Beginner Contest 288 Ex A Nameless Counting Problem

洛谷传送门 AtCoder 传送门 考虑到规定单调不降比较难搞。先设 \(g_t\) 为长度为 \(t\) 的满足条件的序列个数(可重且有顺序)。求这个可以设个 dp,\(f_{d, i}\) 表示考虑到从高到低第 \(d\) 位,当前 \(t\) 个数中有 \(i\) 个仍然顶上界,并且之前的位都 ......
Beginner Counting Nameless AtCoder Contest

算法:线段树

算法:线段树 哦吼!终于来学线段树啦~~ 拖了好久都没有敢学,主要是基础知识点不熟,代码能力太弱。但是现在已经是时候了。 来看: 线段树(Segment Tree)几乎是算法竞赛最常用的数据结构了,它主要用于维护 区间信息 (要求满足结合律)。与树状数组相比,它可以实现 \(O(log⁡\ n)\) ......
线段 算法

Atcoder abl c

传送门 题目描述 有n个城市,m条双向路的图,问你最少添加几条路使得任意两个城市可以两两到达? 样例 样例输入 3 1 1 2 样例输出: 1 题目解析 这是个双向路的图,我们可以把它当成一个非连通图。在各个点之间有连线,要求我们算出如何能将整个图的各个部分连接起来。那么,我们只要算出这个非连通图由 ......
Atcoder abl

AtCoder——第一题

AtCoder Beginner Contest 322 F Vacation Query 题目大意 处理01字符串,给定Q次询问,询问区间内最长连续1的字符个数 题目理解 使用线段树维护区间 需要使用懒标记下传修改信号 线段树要维护7个信息(区间的最长连续1的个数、区间左端点开始连续1的个数、区间 ......
AtCoder

线段树优化建图

一个很好用的 \(trick\)。 我们通过例题 CF786B 为例。 他需要我们支持点之间连边,点和区间之间连边,区间和点之间连边。 支持最短路。 如果我们暴力连边,显然最多是有 \(n^2\) 条边的。那怎么办呢,引入线段树分治。 线段树分治 在某些题中,我们可能会用 \(v \to u\in[ ......
线段

AtCoder Grand Contest 056 D Subset Sum Game

洛谷传送门 AtCoder 传送门 考虑若 \(n\) 是奇数怎么做。枚举 Alice 第一次选的数 \(a_i\),然后考虑把剩下的数两两结成一个匹配,若 Bob 选了其中一个,Alice 就选另一个。容易发现排序后奇数位和它右边的偶数位匹配最优。那么设奇数位的和为 \(A\),偶数位的和为 \( ......
AtCoder Contest Subset Grand Game

AtCoder Beginner Contest 178 E

AtCoder Beginner Contest 178 E E - Dist Max 曼哈顿距离最大点对 \(ans = max(|x_i-x_j|+|y_i-y_j|)\) 考虑去绝对值,4种情况。sort一下取max即可。 #include <bits/stdc++.h> using name ......
Beginner AtCoder Contest 178

线段裁剪:Cohen-Sutherland算法

目录裁剪算法Cohen-Sutherland线段裁剪算法基本思想具体步骤计算分析程序代码 裁剪算法 计算机内部存储的图形数据量通常较大,而屏幕只显示其中一部分,因此需要确定哪些部分在显示区域内,哪些在显示区域外。这个过程称为裁剪(clipping)。裁剪是二维观察(三维观察)的重要部分,参见计算机图 ......

AtCoder Beginner Contest 322

A - First ABC 2 解题思路 签到 Code #include <bits/stdc++.h> using namespace std; typedef long long LL; void solve() { int n; cin >> n; string s; cin >> s; i ......
Beginner AtCoder Contest 322

[AtCoder] E - Packing Under Range Regulations

Key idea: For a given box and a list of balls that can be placed in this box, we should choose the ball with the smallest R. Proof: say we have box B ......
Regulations AtCoder Packing Under Range

AtCoder Beginner Contest 322

A - First ABC 2 (abc322 A) 题目大意 给定一个字符串,找到最先出现ABC的位置。 解题思路 直接查找判断即可。 神奇的代码 #include <bits/stdc++.h> using namespace std; using LL = long long; int mai ......
Beginner AtCoder Contest 322

权值线段树 学习笔记

8月集训学了权值线段树,当时没怎么加强训练。 国庆刚好开始有时间,巩固巩固。补上学习笔记。 首先介绍权值树。其本质是一个记录每个数出现次数的线段树,也就是由桶建成的树。 接下来介绍各种操作。 1.插入。 由于统计的是出现次数,从这个数往上依次加1即可。 void insert(int x,int l ......
线段 笔记

加训日记 Day3——atcoder ABC321乐子场

Day3,9.23 ·打了场acwing周赛,第三题差点就想出来了,想歪到组合数上乱选了呜呜呜 ·ABC321场写的太抽象了,A题上来wa两次,B题少考虑情况乱wa ·C题更是重量级,想不出来正确做法直接暴力,结果打表最后少写了几个数,纯纯犯病场 ·最后加了36分没绷住 acwing周赛排名 atc ......
乐子 atcoder 日记 Day3 Day

AtCoder Regular Contest 123 F Insert Addition

洛谷传送门 AtCoder 传送门 用 \((x, y)\) 表示 \(Ax + By\),那么这个等价于 SB 树。 那么直接在 SB 树上二分,遍历一遍找到 \(n\) 个点就好了。可以采用类似线段树查询的方式。 于是现在还剩下一个子问题:给定 \(a, b\),求 \(ax + by \le ......
Addition AtCoder Regular Contest Insert

230928 做题记录 // 超级 NB 线段树

最近特别喜欢用 NB 这个词。这是为什么呢? 因为我太 NB 了。我怎么这么厉害呢?我好想朝所有人都嘚瑟嘚瑟!我真 NB! 先开题吧。 A - 等差子序列 https://vjudge.net/contest/583230#problem/A 非常 NB 的一道线段树!但是现在没空所以先不写。 B ......
线段 230928 NB

线段树分治&可撤销并查集

可撤销并查集 按时间顺序用一个栈维护合并信息,撤销时从栈顶弹出合并信息,恢复原状态。 并查集查找祖先时 不能路径压缩,只能按秩合并。 例题: [ABC302Ex] Ball Collector 容易想到将 \(A_i\) 和 \(B_i\) 之间连边。 遍历整棵树,用可撤销并查集维护图。 为了进一步 ......
线段 amp

树状数组和线段树

今天太幸运了!硬啃把模板啃下来! 树状数组 解决的本质问题 树状数组解决的本质问题只有一个: 单点改动、区间求值 其他的问题,都是可以转化到该问题上的。 代码板子重点操作 lowbit操作 int lowbit(int x){ return x & -x;} add添加一个值操作 void add( ......
线段 数组

AtCoder Regular Contest 127 F ±AB

洛谷传送门 AtCoder 传送门 非常妙的题。 先直观感受一下,显然当 \(M\) 大到一定程度后,\([0, M]\) 的所有数都能被取到。考虑 \(V \gets V + Ax + By\),其中 \(V + Ax + By \in [0, M]\)。如果 \(x, y\) 都是正数显然可以取 ......
AtCoder Regular Contest 127 177

根据一个数组,创建一个Segment Tree(线段树)

线段树的特点 线段树的优势 线段树的构造过程 线段树的基本数据结构(结点结构由五个分量组成) 运行结果 (C语言代码)递归的创建一颗线段树,然后中序、先序、后序遍历这个结点 #include <stdio.h> #include <stdlib.h> #include <stdbool.h> typ ......
线段 数组 Segment Tree

Atcoder ABC321 笔记

A - 321-like Checker \(\color{gray}{22}\) 直接模拟 void solve() { int n; cin >> n; int lst = -1; for(int i = n; i; i /= 10) { int u = i % 10; if(u <= lst) ......
Atcoder 笔记 ABC 321

AtCoder Regular Contest 102

C - Triangular Relationship 枚举 \(a\bmod k\) 的值,\(b\bmod k,c\bmod k\) 的值也就确定了,算下贡献就好了。 #include<iostream> #include<cstdio> using namespace std; int n,k ......
AtCoder Regular Contest 102