首页 > TAG信息列表 > lson

CodeForces-1671E Preorder

Preorder 树型 dp + 思维 \(dp[i]\) 表示以 \(i\) 为根的子树通过变换有多少种不同的先序遍历 状态转移方程: 当左右子树不同,两个子树交换位置之后,没有重复的出现:\(dp[x] = dp[lson] * dp[rson] * 2\) 当左右子树相同时,两个子树交换位置后,会有相同的出现:\(dp[x] = dp[lson] * d

高度模式化的线段树写法

(水) struct point{int l,r,val1,val2/*要维护的信息*/,tag1,tag2/*标记*/;}tree[maxn<<2]; point pushup(point x,point y,int tg1,int tg2/*标记传进来*/) { point ans; if(x.l==0)return y;//如果其中一个为空直接返回另一个 if(y.l==0)return x; ans.l=x.l;ans.

【模板】有旋Treap

\(update\) \(at\) \(2022.6.16\) 修改了些晦涩难懂的地方。 调了一周,今天总算调出来了。 概述: $ Treap = Tree + Heap $,其既有二叉查找树 \(BST\) 的性质,又有堆 \(Heap\) 的性质,于是有能维护排名,有能保证深度在 \(Θ(logN)\) 的量级。 BST: 即二叉查找树,满足保证根左侧子树的所有

CF1172F Nauuo and Bug 题解

首先将问题转化为执行 sum(A,l,r,p) 后减去了多少次 \(p\)。 注意到若 \(x>y\),则 \(result\) 的初值为 \(x\) 时执行 sum(A,l,r,p) 中减去 \(p\) 的次数不少于 \(result\) 的初值为 \(y\) 时执行 sum(A,l,r,p) 中减去 \(p\) 的次数,故考虑建线段树并对区间 \([l,r]\) 维护 \(c_x\)

重探线段树

方差 题意 \(1e5\) 范围处理区间加,区间平均数,区间方差。 做时思路 明显区间方差是这道题目的关键,其他两个与模板并无不同。 这里我们思考一下如何处理区间方差。 方差的计算公式向下推就完事儿了。 令其中有 \(k=r-l+1\) 个元素。 \(s^2=\frac{\sum\limits ^r_{i=l} (\bar{x}-x_i)

Codeforces Round #798(Div 2)

C 题意:给定一棵以 \(1\) 为根,\(n\) 个节点的二叉树,根节点被感染了。然后将会执行以下过程 \(n\) 次: 选定一个未被感染的节点,删除它,断开它周围的所有连边。 已感染的节点会沿其连边感染其相邻节点。 求最后最多可以有多少个节点未被感染(删除的节点不算) 分析:裸树形dp,\(dp[x]\) 表

HOTEL 旅馆

HOTEL 旅馆 这其实就是一个简单版的山海经(也就花了一晚上而已) 虽然暴力也能过,但是还是写个线段树更好一些,锻炼一下自己的能力 题目描述 OIER最近的旅游计划,是到长春净月潭,享受那里的湖光山色,以及明媚的阳光。作为整个旅游的策划者和负责人,贝茜选择在湖边的一家著名的旅馆住宿

CodeForces 1616H Keep XOR Low {a^b≤x} / CodeForces gym102331 Bitwise Xor {a^b≥x}(trie树 + 计数)

文章目录 CodeForces 1616H Keep XOR Lowproblemsolutioncode CodeForces gym102331 Bitwise Xorproblemsolutioncode CodeForces 1616H Keep XOR Low problem 洛谷链接 solution 虽然选的是一个子集,但本质还是二元限制。 这非常类似以前做过的题目,已知

LeetCode 236二叉树的最近公共祖先

菜鸡学习记录 题目链接:236. 二叉树的最近公共祖先 - 力扣(LeetCode) (leetcode-cn.com) 这道题目是使用回溯的方法做的,感觉二叉树一般就是用回溯的方法去做。 找公共祖先,对于某一个节点来说,用lson和rson分别表示其左子树和右子树。 思路是先判断其左子树、右子树是否有p、q,如果有的

cf1010 D. Mars rover(树)

题意: 有一棵逻辑运算树,叶子节点为输入节点(IN),取值0/1;其他节点有AND/OR/XOR/NOT四种类型,并根据儿子节点取不同的值。输出为根节点的值。 初始每个输入节点的值给定(因此所有节点的值确定)。问单独改变每个输入节点的值而保持其他输入节点不变,输出是多少 思路: 二叉树,每个节点存储节

CF718C Sasha and Array

题目大意 在本题中,我们用 \(f_i\) 来表示第 \(i\) 个斐波那契数 \(f_1=f_2=1,f_i=f_{i-1}+f_{i-2}(i\ge 3)\)。 给定一个 \(n\) 个数的序列 \(a\)。 有 \(m\) 次操作,操作有两种: 将 \(a_l\sim a_r\) 加上 \(x\)。 求 \(\displaystyle\left(\sum_{i=l}^r f_{a_i}\right)\bmod (1

CF666E Forensic Examination(后缀自动机,可持久化线段树合并)

给你一个串\(S\),以及一个字符串数组\(T_{1,2,...m}\),\(q\)次询问,每次问\(S\)的子串\(S[p_l,...p_r]\)在\(T_{l...r}\)中的哪个串的出现次数最多,并输出出现次数。 做法: 对串\(S\)和数组\(T\)建立后缀自动机。 在后缀自动机上找到\(S[l,r]\)这个子串对应的节点u,这是一个经典操作。

NC11180 D.妄想集合(线段树)

目录 Description State Input Output Solution Code Description 有 \(n\) 个可重集合,有两种操作 \(Quant\ l \ r\ x\) :在区间 \([l, r]\) 内都加入数 \(x\) \(Ask\ l\ r\):从 \([l,r]\) 内取出三个数是否可以构成三角形 State \(1<=n,m<=10^5\) \(1<=x<=10^9\) Input 5

CSUSTOJ 签到题(线段树 + bitset优化)

题目链接 题意: 给定一个长度为 \(n(1\leq n \leq 2\times10^5)\) 的数组 \(a(1 \leq a[i]\leq10^9)\)和一个数 \(m (1\leq m \leq 60)\). 现给出 \(q(1 \leq q \leq10^5)\)次操作: 操作\(1\):输入\(1\), \(l\), \(r\), \(val\)\((1 \leq l \leq r \leq n , val \leq10^9)\

HDU - 4027 Can you answer these queries?(线段树)

题目链接 思路: 1.查询:区间查询板子 2.修改: 要将线段树区间修改稍微改一下,因为每次区间修改都把该区间所有的数修改为向下取整的原值开根号,所以一个1e18次方的数修改超过50次(我猜的)大概就会变成1,而 1修改的话值不变,所以当修改区间的所有值都为1时就不用再修改该区间了直接r

P3224 [HNOI2012]永无乡(线段树合并)

支持加边和询问连通块第k大点权。 线段树合并即可。 //线段树合并 //每次合并两个连通块的权值线段树 //询问第k大 #include<bits/stdc++.h> using namespace std; const int maxn=1e5+10; const int M=maxn*100; int c[M],lson[M],rson[M],T[maxn],tot; void pushup (int newRo

LG 题解 P4041 [AHOI2014/JSOI2014]奇怪的计算器

目录前置芝士DescriptionSolutionCode 前置芝士 线段树 Description 简述题意: 给你一段序列 \(a\),要求支持下面 \(4\) 种操作,设操作完后的序列为 \(c\),输出操作完后的序列 \(c\)。 1、全局加 \(x\); 2、全局减 \(x\); 3、全局乘 \(x\); 4、全局加上该位置的起始值乘 \(x\); 还有一

P1456 Monkey King(左偏树)

洛谷题目传送门 题目描述 曾经在一个森林中居住着 N 只好斗的猴子。在最初他们我行我素,互不认识。但是猴子们不能避免争吵,且两只猴子只会在不认识对方时发生争吵,当争吵发生时,双方会邀请它们各自最强壮的朋友并发起决斗(决斗的为各自最强壮的朋友)。当然,在决斗之后两只猴子和他

【笔记】线段树合并

有了动态开点线段树,就有了这种东西 你在树上跑,是不是经常很想用权值线段树维护一些东西 然后马上觉得不行,你从这个子树下去对线段树一通操作,那你等会去另一个子树时被影响到了怎么办 然后你又想,如果每个子树(的根节点)都有一个线段树,然后合并起来不好吗 那这不是在扯淡吗,线段树开多

BZOJ 2626: JZPFAR KDtree + 堆

escription   平面上有n个点。现在有m次询问,每次给定一个点(px, py)和一个整数k,输出n个点中离(px, py)的距离第k大的点的标号。如果有两个(或多个)点距离(px, py)相同,那么认为标号较小的点距离较大。 Input   第一行,一个整数n,表示点的个数。   下面n行,每行两个整数x_i,

黑暗爆炸 - 4695 最假女选手 - 吉老师线段树

传送门 给一个区间[L,R] 加上一个数x 把一个区间[L,R] 里小于x 的数变成x 把一个区间[L,R] 里大于x 的数变成x 求区间[L,R] 的和 求区间[L,R] 的最大值 求区间[L,R] 的最小值 由吉老师线段树基础进阶。增加了区间加操作 但对于同时进行23操作的话,也多了一个特判,就是最大值修改时

权值线段树与动态开点

由于要学习可持久化线段树所以先来补下前缀知识,其实都是很简单的东西 首先权值线段树和普通线段树的区别 普通线段树一般维护的是一个区间的最大值,以及一个区间的和等等 故名思意,而权值线段树一般维护的是权值的数量,维护一个区间\([l,r]\)有多少个值 即有多少个值的范围在\([l,

P5494.【模板】线段树分裂

【模板】线段树分裂 给出一个可重集a(编号为1),它支持以下操作: 0 p x y:将可重集p中大于等于x且小于等于y的值放入一个新的可重集中(新可重集编号为从2开始的正整数,是上一次产生的新可重集的编号+1) 1 p t:将可重集t中的数放入可重集p中,且清空可重集t(数据保证在此后的操作中不会出现可重

CF573E Bear and Bowling

XXVII.CF573E Bear and Bowling 考虑暴力的DP。设 \(f_{i,j}\) 表示前 \(i\) 个元素中选择长度为 \(j\) 的子序列所能得到的最大收益。 考虑由 \(f_i\) 转移到 \(f_{i+1}\)。明显,一共有两种转移方式:\(f_{i,j}\rightarrow f_{i+1,j}\),或 \(f_{i,j}+(j+1)a_{i+1}\rightarrow f_{i+1,

1479D.Odd Mineral Resource(可持久化线段树+树上差分+随机算法)

题意: 给出一棵树,每次询问两点之间是否存在一个l到r之间的数出现奇数次,找到这个数。 题解: 询问是否出现奇数次,用可持久化线段树套树上差分维护异或和。 找到这个数,不套随机数一直wa5,看了官方题解,里面有证明套随机数求解这个问题可以做到大概率正确。woc真的好难。 #include<bits/s