线段树进阶之落花成泥

————————————————————————相识,是在那么不经意的瞬间。我还远远不够,远远,远远,远远不够啊。加油呀!

foundation :

1.异或,英文为exclusive OR,缩写成xor。

异或(xor)是一个数学运算符。它应用于逻辑运算。异或的数学符号为"⊕",计算机符号为"xor"。其运算法则为:a⊕b = (¬a ∧ b) ∨ (a ∧¬b)。

如果a、b两个值不相同,则异或结果为1。如果a、b两个值相同,异或结果为0。

异或也叫半加运算,其运算法则相当于不带进位的二进制加法:二进制下用1表示真,0表示假,则异或的运算法则为:0⊕0=0,1⊕0=1,0⊕1=1,1⊕1=0(同为0,异为1),这些法则与加法是相同的,只是不带进位,所以异或常被认作不进位加法。

2.实际上分块的本质就是优雅的暴力qwq。

3.其实越暴力的算法可以支持的操作就越多、功能性就越强呐!你看n^2的暴力几乎什么都可以维护

4.时间复杂度的计算时我的软肋。

5.输入大数据一定不要用不加优化的cin/cout。——>https://blog.csdn.net/qian2213762498/article/details/81982380

6.优秀博文:

(1):https://www.luogu.org/problemnew/solution/P3372

原文地址:https://www.cnblogs.com/dragondragon/p/11263394.html

时间: 2024-10-11 07:27:20

线段树进阶之落花成泥的相关文章

Mayor's posters(线段树之点的成段更新加离散化)

bin神的萌萌哒专题 这道题目也是简单区间更新的线段树题目,不过题目的数据范围很大,直接搞,时间空间的花费都会异常的高,所以就要用到离散化来优化时间空间复杂度. 何为离散化?........................ 简单地说就是对于给出的庞大数据进行一种数据上的缩小. 比如给你一段(1,10000)的区间,由于我们要的不是其区间长度,我们只需要知道这段区间的状态 如何,于是我们可以忽视其长度,把其表示成(1,2)这个区间长度极小的区间,这相当于物理上的质点. 当我们处理的问题上与其区间长

Just a Hook(线段树之点的成段更新)

萌萌哒的传送门 /* * hdu 1698 * 线段树的点的成段更新 * 这道题不用预先建树,只需把1号节点延迟标记下就行 */ #include <iostream> #include <cstring> #include <cstdio> #include <cmath> #include <set> #include <queue> #include <vector> #include <cstdlib>

poj 4047 Garden 线段树lazy标记与成段更新

题意: 给长度为n的序列及k(0<k<=n<=200000),m个操作p,x,y.其中(1)p==0:将x位置处的数变为y;(2)p==1:将x,y位置处的数互换.(3)p==2查询x-y位置之间连续k个数的和的最大值. 分析: 求连续区间的和最大,可以把区间看成一个点,这样这n-k+1个区间的最大和可以看做n-k+1个点的最大值,当更新原序列中位置x的值就相当于更新区间中x-k+1到x区间的值,然后用线段树做成段更新.成段更新要用到lazy标记,我的理解是:当更新或query的时候如果

线段树-进阶

上一次我们写的线段树已经可以解决区间查询.单点修改了!可喜可贺 那如果现在我们需要区间修改.区间查询呢? 一般有两种思路:lazytag和标记永久化,lazytag的使用面好像更广一些. 一.lazytag 比如我们现在要修改一个区间,我们可以像查询一样分成若干段,然后分别修改每一段. 那么问题来了,每一段要怎么修改?如果直接修改sum,询问就乱套了.如果暴力修改,最坏复杂度O(n),那还要线段树干嘛(╯‵□′)╯掀桌 那我们这么想,我们修改就不修改整个区间了,而是在区间上维护一个标记. 那我们

线段树(多维+双成段更新) UVA 11992 Fast Matrix Operations

题目传送门 题意:训练指南P207 分析:因为矩阵不超过20行,所以可以建20条线段的线段树,支持两个区间更新以及区间查询. #include <bits/stdc++.h> using namespace std; #define lson l, mid, o << 1 #define rson mid + 1, r, o << 1 | 1 typedef long long ll; const int INF = 0x3f3f3f3f; const int N =

hdu 4521 小明系列问题——小明序列(线段树+DP或扩展成经典的LIS)

小明系列问题--小明序列 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Total Submission(s): 1553    Accepted Submission(s): 457 Problem Description 大家都知道小明最喜欢研究跟序列有关的问题了,但是也就由于这样,小明差点儿已经玩遍各种序列问题了.可怜的小明苦苦地在各大站点上寻找着新的序列问题,但是找来

CSU-ACM集训-模板-线段树进阶

A题 原CF 438D The Child and Sequence 题意 给一串数字,m次操作,1.区间查询:2.区间取模:3.单点修改 基本思路 考虑到模如果大于区间的最大值,则取模没有意义.若小于则向下查询并修改,考虑到一个数每次取模最多为原数的\(1/2\),则可认为修改次数不超过\(\log{2}{n}\) 时间复杂度为\(O(n\log{2}{n}\log{2}{n})\) #include<bits/stdc++.h> #define FOR(i,a,b) for(int i=a

线段树进阶

T1:高速公路 题干: $Y901$ 高速公路是一条重要的交通纽带,政府部门建设初期的投入以及使用期间的养护费用都不低,因此政府在这条高速公路上设立了许多收费站. $Y901$ 高速公路是一条由 $N-1$ 段路以及 $N$ 个收费站组成的东西向的链,我们按照由西向东的顺序将收费站依次编号为1-N,从收费站 i 行驶到 i+1 (或从 i+1 行驶到 i )需要收取 V_i 的费用.高速路刚建成时所有的路段都是免费的. 政府部门根据实际情况,会不定期地对连续路段的收费标准进行调整,根据政策涨价或

HDU 1754 I Hate It 线段树(单点更新,成段查询)

题目链接: hdu: http://acm.hdu.edu.cn/showproblem.php?pid=1754 题解: 单点更新,成段查询. 代码: 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #define lson o<<1 6 #define rson (o<<1)|1 7 #define M l+(r