当前位置: 首页 > news >正文

树套树

P3380 【模板】树套树

这里采取的是线段树套平衡树(FHQ)

考虑树套树可以解决类似于在两维区间限制类似操作的问题

把线段树上每个节点维护一颗平衡树,维护的方法也非常简单,发现只要知道root,就能够访问平衡树,非常简单

考虑每个节点会被添加log次,所以平衡树要 nlogn 个节点,线段树普通 4n 个节点

考虑二操作,就二分一下排名的数,查排名,\(log^3\)

修改操作,把所有包含修改节点的平衡树进行修改

注意!!!!!!!(血淋淋的教训,我调了好几个小时)

平衡树添加节点一定要按照顺序合并,即先按照排名分裂,在依次合并,保证满足二叉树性质,这个在添加节点和修改节点时都要满足

查排名是查有多少个小于x的数,因为我们答案最终是要累加起来,别忘了最后+1

修改节点时一定要把修改出来的节点,所有的变量都初始化!!!

#include<bits/stdc++.h>
#define ls(x) dt[x].ls
#define rs(x) dt[x].rs
#define pri(x) dt[x].pri
#define key(x) dt[x].key
#define siz(x) dt[x].siz
using namespace std;
const int N=5e4+5,M=1e8;
int cnt,n,m;
int a[N];
struct node{int root,key;
}tr[N*4];
struct dot{int ls,rs,pri,key,siz;
}dt[N*20];
struct FHQ{int newnode(int x){dt[++cnt]={0,0,rand(),x,1};return cnt;}void update(int u){siz(u)=siz(ls(u))+siz(rs(u))+1;}void split(int u,int x,int &L,int &R){if(u==0){L=R=0;return;}if(key(u)<=x){L=u;split(rs(u),x,rs(u),R);}else{R=u;split(ls(u),x,L,ls(u));}update(u);}int merge(int L,int R){if(!L||!R)  return L+R;if(pri(L)<pri(R)){rs(L)=merge(rs(L),R);update(L);return L;}else{ls(R)=merge(L,ls(R));update(R);return R;}}void insert(int &root,int l,int r){//RE表明没写返回值for(int i=l;i<=r;i++){int L,R;split(root,a[i],L,R);root=merge(L,merge(newnode(a[i]),R));}}int rank(int &root,int x){int L,R;split(root,x-1,L,R);int res=siz(L);//这里要判断是否已经全满了root=merge(L,R);return res;}int find(int u,int k){if(!u) return -1;if(siz(ls(u))+1==k)  return key(u);else if(siz(ls(u))+1<k)  return find(rs(u),k-siz(ls(u))-1);else  return find(ls(u),k);}void change(int &root,int x,int k){int L,R,p=0;split(root,x-1,L,R);split(R,x,p,R);int g=p;p=merge(ls(p),rs(p));root=merge(L,merge(p,R));//插入一定是要有顺序的split(root,k,L,R);if(g){dt[g]={0,0,rand(),k,1};//一定要全部修改root=merge(L,merge(g,R));}}int pre(int &root,int x){int L,R;split(root,x-1,L,R);int res=find(L,siz(L));if(res==-1)  res=-2147483647;root=merge(L,R);return res;}int suc(int &root,int x){int L,R;split(root,x,L,R);int res=find(R,1);if(res==-1)  res=2147483647;root=merge(L,R);return res;}void print(int u){if(!u)  return;print(ls(u));printf("%d ",key(u));print(rs(u));}
}FHQ;
struct tree{void build(int k,int l,int r){FHQ.insert(tr[k].root,l,r);if(l==r){tr[k].key=a[l];return;}int mid=(l+r)>>1;build(k*2,l,mid);build(k*2+1,mid+1,r);}void change(int k,int l,int r,int x,int g){FHQ.change(tr[k].root,a[x],g);if(l==r){return;}int mid=(l+r)>>1;if(x<=mid)  change(k*2,l,mid,x,g);else  change(k*2+1,mid+1,r,x,g);}void she(int &res,int op){if(op==1)  res=0;if(op==2)  res=-2147483647;if(op==3)  res=2147483647;}void update(int &res,int op,int num){if(op==1)  res+=num;if(op==2)  res=max(res,num);if(op==3)  res=min(res,num);}int figue(int k,int g,int op){if(op==1)  return FHQ.rank(tr[k].root,g);if(op==2)  return FHQ.pre(tr[k].root,g);if(op==3)  return FHQ.suc(tr[k].root,g);}int query(int k,int l,int r,int x,int y,int g,int op){if(x<=l&&r<=y){return figue(k,g,op);}int mid=(l+r)>>1,res;she(res,op);if(x<=mid)  update(res,op,query(k*2,l,mid,x,y,g,op));if(y>mid)  update(res,op,query(k*2+1,mid+1,r,x,y,g,op));return res;}int middle(int x,int y,int k){int l=0,r=M;while(l<r){int mid=(l+r+1)>>1;if(query(1,1,n,x,y,mid,1)+1<=k)  l=mid;else  r=mid-1;}return l;}
}tree;
int main(){srand(time(NULL));scanf("%d%d",&n,&m);for(int i=1;i<=n;i++){scanf("%d",&a[i]);}tree.build(1,1,n);for(int i=1;i<=m;i++){int op,l,r,k;scanf("%d%d%d",&op,&l,&r);if(op==1){scanf("%d",&k);printf("%d\n",tree.query(1,1,n,l,r,k,1)+1);}if(op==2){scanf("%d",&k);printf("%d\n",tree.middle(l,r,k));}if(op==3){tree.change(1,1,n,l,r);a[l]=r;}if(op==4){scanf("%d",&k);printf("%d\n",tree.query(1,1,n,l,r,k,2));}if(op==5){scanf("%d",&k);printf("%d\n",tree.query(1,1,n,l,r,k,3));}}return 0;
}

相关文章:

树套树

P3380 【模板】树套树 这里采取的是线段树套平衡树(FHQ) 考虑树套树可以解决类似于在两维区间限制类似操作的问题 把线段树上每个节点维护一颗平衡树,维护的方法也非常简单,发现只要知道root,就能够访问平衡树,非常简单 考虑每个节点会被添加log次,所以平衡树要 nlogn 个…...

复制R包

复制R包点击查看代码for dir in $(ls /upan/project1/library/ ); doecho "$dir"[ ! -d "/root/miniconda3/envs/Rdoc/lib/R/library/$dir" ] && cp -r "$dir" /root/miniconda3/envs/Rdoc/lib/R/library/; done...

【Azure Developer】Java代码实现获取Azure 资源的指标数据却报错 invalid time interval input

问题描述 在使用 Java 代码调用虚拟机(VM)API获取指标数据时,出现时间格式解析错误。 错误信息:{ "code": "BadRequest", "message": "Detected invalid time interval input: 2024-03-13T13:33:05.123 15:00/2024-03-13T13:48:05.…...

小记基环树上的最大独立集

今天又一次碰到了这个问题,上一次是 [ZJOI2008] 骑士,这一次是 城市环路。 记录一下这个问题怎么搞。 我们选择把这个问题转化为在一棵正常的树上边做正常的最大独立集,同时有环上的两个相邻点 \(S,T\) 被规定不能选择相同的。 我们断掉 \(S,T\) 之间这一条边,选择在 \(S,T…...

张量链式法则(上篇):任意维度反向传播公式推导与常见算子解析

本文为常用算子反向传播公式的上篇,介绍了适用于任意张量函数的链式法则公式,使用该公式可以求出诸如reshape,broadcast_to这类会改变张量维度数量的算子的反向传播公式。本文同时给出了求常见算子反向传播公式的通用方法,并以几个简单的算子为例进行了演示。 本系列文章的…...

GAS_Aura-Aura Input Component

1...

CF739C Alyona and towers

比较套路的一个题。 首先你先想 DP 怎么做。 设 \(f_{i, 0/1}\) 表示到了 \(i\) 目前正在上升还是正在下降最长长度是多少,不难发现这个只和相邻两个数的大小关系有关。 发现区间加并不影响区间内相邻大小关系,只影响交界处的关系,所以这是一个单点改。 我们用一个矩阵维护 …...

bitset 相关记录

这里记录有关 \(bitset\) 的一些知识点和实用技巧。 可以引起 \(O(\frac{n}{w})\) 优化的原理和操作:原理:\(bitset\) 内置 \(long long\) 类型数组,每一位是一个 \(bit\)。因此实际操作时,若操作 \(n\) 位,则相当于只是对 \(\frac{n}{64}\) 个 \(longlong\) 类型的数字操…...

大学生开始学习编程

第一篇blog 各位厉害的编程大神们你们好呀! 我现在刚上大二,算法分析与设计老师要求我们开通这个网站的博客,然后在这个论坛学习。在很多帖子我看见很多人悉心请教,也有很多大佬乐于解答,是个氛围很好的社区呢!以后我会偶尔在这个网站上发博客,主要是关于我的近期学习成…...

2025京东方全球创新伙伴大会隆重举行 AI焕新驱动产业质变跃迁

9月11日,以“屏之物联 AI焕新”为主题的京东方全球创新伙伴大会2025(BOE IPC 2025)在北京中关村国际创新中心盛大开幕。作为BOE(京东方)面向全球显示及物联网生态合作伙伴举办的第八届行业盛会,本届IPC大会延续IPC WEEK的形式,呈现了十余场专业论坛以及投资者活动、电竞…...

VMware Workstation 17.5.2 Build 23775571

下载地址:https://www.filehorse.com/download-vmware-workstation/88268/ 激活码:JA09H-4V15H-M80V8-8A8Z4-2U8N4...

编程要求

1 接口写参数(Value1, Value2) 必须第一个参数,后面加一个空格,再写第二个参数 2 入参命名 In_Name,出参命名 Out_Name...

qoj1828 TraveLog

题意 给出一个有向带权图。 有一条 \(1\to n\) 的最短路。给出 \(1\) 到这条最短路上某些点的最短路长度,询问这条最短路是否无解,唯一解,多解,并输出唯一解的方案。 \(n\le 2\times 10^5,m\le 3\times 10^5\)。 思路 首先跑一遍 dij 求出 \(1\to i\) 的最短路长度,记为 \…...

CF827D Best Edge Weight

代码有点史,懒得写了。 你注意到一件事情就是,先随便拎出一棵最小生成树,我们将边分为在这棵树上的边和不在这棵树上的边,那么我们分别考虑。对于树边,考虑所有包含它的非树边最小的那一条就是其上界。 对于非树边,其两个端点之间的树边路径上边权最小的那一条就是其上界…...

基于 YOLOv8 和 Streamlit 搭建视频实时目标跟踪与分割 Web 应用的完整流程

计算机视觉技术的快速发展使得实时目标检测与分割在多个领域得到广泛应用。本文将详细解析如何结合 YOLOv8 算法与 Streamlit 框架,构建一个功能完善的视频实时目标跟踪与分割 Web 应用。通过这个方案,开发者可以快速实现从模型集成到 Web 界面开发的全流程,最终部署一个能够…...

win10休眠失败_自动启动 解决办法

************************************************** *********************** ***************** 每个文章内容都是测试有效的...

新人必看:入职第一个月,如何快速熟悉业务并开始测试?

作为一名刚加入团队的新人测试工程师,面对全新的工作环境、陌生的业务领域和复杂的技术栈,内心既充满期待又不免有些忐忑。如何高效地度过第一个月,快速熟悉业务并开始承担测试任务,是每个新人都在思考的问题。作为一名刚加入团队的新人测试工程师,面对全新的工作环境、陌…...

202210_QQ群_神秘的压缩包

ZIP,CRC碰撞Tags:ZIP,CRC碰撞 0x00. 题目 附件路径:https://pan.baidu.com/s/1GyH7kitkMYywGC9YJeQLJA?pwd=Zmxh#list/path=/CTF附件 附件名称:202210_QQ群_神秘的压缩包.zip 某地网安专责截获疑似攻击者用于传送秘密信息的压缩包,请协助该网安专责进行分析。flag格式为fla…...

人闲的时候

可以在猜盐中大展神威! #include<bits/stdc++.h> #include<windows.h> using namespace std; string fu[100100]={"sbdzb","b","p","m","f","d","t","n","l","g…...

第一周作业

第一周作业1.自我介绍 唐潇情 爱好:听歌 刷视频 2.现状、经验和计划 学习过C语言和Java 掌握的基础不扎实 计划是在课上认真听课,课下复习前面掌握不牢的知识,练习代码 目前不知道未来具体做什么工作,先把专业和基础知识学好,有考研的打算 代码量少,基本没有额外练习 在这…...

C# GC

C# GC...

CCPC 2024 郑州 个人题解

目前完成:A、B、C、J、L、M。 待补:D、E、F、G、I、K。比赛链接QOJ 链接题解完成情况A B C D E F G H I J K L M\(\Box\) \(\Box\) \(\Box\) 待补待补 待补\(\Box\) 待补 \(\Box\) \(\Box\)H 是个论文题。 L. Z-曲线 (Z-order Curve)点击查看题意简述 给定二维 Z 形曲线的一个…...

Pollard Rho 分解质因数

Miller_Rabin 判断素数 如果有 \(a^{p-1} \equiv 1(\bmod p)\) ,\(p\) 大概率为质数。但是人们发现有些合数无法被这个式子判掉。 有一个显然成立的式子: \(x^2 \equiv 1 (\bmod p) \rightarrow x^2-1\equiv 0 \rightarrow (x-1)(x+1) \equiv 0\)​ 当 \(p\) 是质数时,\(x\)…...

智慧消防大数据中心

在现代城市化进程不断加快的背景下,消防安全面临着日益复杂严峻的形势。传统消防模式难以满足大体量、多样化的消防需求。智慧消防大数据中心应运而生,它如同消防领域的 “智慧大脑”,正全方位革新消防工作模式,为生命财产安全筑牢坚实防线。一、建设内容 (一)数据采集层…...

GAS_Aura-Input Config Data Asset

1...

[杂谈] 关于听的音乐

持续更新中,应为开学较忙未能一次整理完。 防止有某些人攻击,叠甲。 以下所有内容仅代表个人观点,没有贬低某歌手或歌曲的意思,如果有不同意见欢迎在评论区讨论,但请保持良好的语言环境。 就是分享一下自己听的音乐吧,虽然Frums的歌手排行中第一是山茶花第二是静屋。 听歌…...

7777

tyyyy...

[豪の学习笔记] 软考中级备考 基础复习#7

基本概念、编译与解释、文法、语法推导树、有限自动机、正规式、表达式、传值与引用、各种程序语言特点跟学视频:学以致知Learning - 软件设计师 基础阶段|考点理论精讲 Chapter 7 - 程序设计语言基础知识 1 - 基本概念 低级语言和高级语言低级语言:通常称机器语言和汇编语言…...

经典面试题目:二叉树遍历

一、 核心定义与性质 二叉树(Binary Tree) 是一种每个节点最多有两个子节点的树形结构。这两个子节点通常被称为左子节点和右子节点。 关键术语:根节点(Root): 树的顶层节点,没有父节点。 叶子节点(Leaf): 没有子节点的节点。 深度(Depth): 从根节点到该节点所经历…...

十、微程序控制器是什么?

目录一言以蔽之一个精妙的比喻:做菜与菜谱核心组成部分(对照比喻)它为什么重要?有什么优点?总结一言以蔽之 微程序控制器是CPU的“灵魂指挥家”,它通过执行预先写好的“微程序”(一套精细的指令步骤)来指挥CPU的各个部件协同工作,从而完成一条条机器指令。一个精妙的比…...

2023CCPC秦皇岛站

define时间:#define itn int #define int long long #define ind long double #define yes cout << "Yes" #define no cout << "No" #define pii pair<long long, long long> #define pci pair<char, int> #define re return;QOJ…...

十一、微程序控制器的组成和工作过程

目录一、微程序控制器的核心思想二、微程序控制器的主要组成部分三、微程序控制器的工作过程(重中之重)四、一个简单的例子一、微程序控制器的核心思想 首先,再次强调其核心思想:将一条机器指令的执行,转化为一段由更简单的“微指令”组成的“微程序”的执行。 这些微程序…...

11

111...

六、数据通路的功能和基本结构

目录1. 数据通路的功能2. 数据通路的基本结构3. 工作流程示例(以加法指令 ADD Rd, Rs, Rt 为例)总结1. 数据通路的功能 数据通路(Data Path) 是中央处理器(CPU)的核心组成部分之一。它的主要功能是为指令的执行提供数字信号(数据、地址)的传输路径和加工场所。 具体来说…...

五、单周期CPU和多周期CPU

目录单周期CPU核心思想工作原理优点缺点多周期CPU核心思想工作原理优点缺点核心差异对比总结与发展计算机组成原理中的两个核心概念:单周期CPU和多周期CPU。 它们是实现CPU控制器的两种经典设计方法,各有其优缺点和设计哲学。单周期CPU 核心思想 单周期CPU的设计理念非常直观…...

七、组合逻辑元件(操作元件)和 时序逻辑元件(状态原件)

目录1. 组合逻辑元件(Combinational Logic Elements)核心特征功能常见示例抽象表示2. 时序逻辑元件(Sequential Logic Elements)核心特征功能常见示例抽象表示对比总结在数据通路中的协同工作在数字电路和计算机组成原理中,几乎所有元件都可以被划分为这两大类:组合逻辑元…...

九、指令、微程序、微指令、微命令、微操作

目录核心比喻:做一道菜(比如“鱼香肉丝”)1. 指令 (Instruction)2. 微操作 (Micro-operation, μop)3. 微命令 (Micro-command)4. 微指令 (Microinstruction)5. 微程序 (Microprogram)梳理总结与记忆口诀核心比喻:做一道菜(比如“鱼香肉丝”) 我们把执行一条CPU指令(比如…...

八、CPU控制器的功能和工作原理

目录一、CPU控制器是什么?二、控制器的核心功能三、控制器的工作原理1. 硬布线控制器(Hardwired Control)2. 微程序控制器(Microprogrammed Control)四、现代控制器的演变总结一、CPU控制器是什么? CPU(中央处理器)是计算机的大脑,而控制器(Control Unit, CU) 则是这…...

Linux命令实践

课上测试 作业题目:Linux命令实践 | 学号 | 20131321 | | 姓名 | 王曦轶 | | 日期 | 2025-09-11 | | 实验环境 | Ubuntu |目录实验目的 命令清单与截图 遇到的问题和解决方法 总结与心得实验目的熟练掌握 ls / who / pwd / cd /man/whereis/find/locate/ grep 等高频命令的常…...

Debian 12 解决乱码问题

1.安装中文包apt install -y locales locales-all2.配置本地化设置dpkg-reconfigure locales勾选 中文apt install -y fonts-wqy-zenhei fonts-wqy-microhei xfonts-wqyreboot如果还是不行nano /etc/default/locale## 写入下面的内容 LANG=zh_CN.UTF-8 LC_ALL=zh_CN.UTF-8 LC_C…...

软工第一次作业

这个作业属于哪个课程 https://edu.cnblogs.com/campus/gdgy/Class34Grade23ComputerScience这个作业要求在哪里 https://edu.cnblogs.com/campus/gdgy/Class34Grade23ComputerScience/homework/13478这个作业的目标 <初步了解博客的写作;向别人介绍自己;了解Github的基本…...

Kafka的元数据Metadata

元数据是指Kafka集群的元数据,这些元数据具体记录了集群中有哪些主题,这些主题有哪些分区,每个分区的leader副本分配在哪个节点上,follower副本分配在哪些节点上,哪些副本在AR、ISR等集合中,集群中有哪些节点,控制器节点又是哪一个。Kafka 的元数据(Metadata) 正是描述…...

datadome笔记

pYZs00 -> 0 y7S2ew -> 0E9CFE54DD8A 随机数 有 hash 组成 NEvtKJ -> 0 首次执行 为0 ,查看localStorage 里的值 PFLOGM -> 1.17.0 js固定 wugUNB | display window["ddm"]["displayEnabled"] 返回的...

AI 机器视觉检测方案:破解食物包装四大质检难题,筑牢食品安全防线

在食品生产领域,包装盒或包装袋作为食品的直接包装载体,其质量优劣直接关系到食品安全与企业声誉。传统人工质检在应对食物包装生产的高速节奏与复杂质量问题时,逐渐暴露出诸多局限性,成为企业发展的瓶颈。而 AI 视频检测技术的出现,犹如一把 “智能利剑”,精准且高效地斩…...

Tkinter 多线程并行任务开发:从秒数丢失到完整显示的踩坑与解决

在 Tkinter 桌面应用开发中,多线程是解决 UI 卡顿的常用方案,但新手很容易在 "线程安全" 和 "UI 更新" 上踩坑。本文记录了一次 Tkinter 多线程并行任务开发中的典型问题:函数执行秒数丢失、最后一秒不显示,以及对应的排查思路和解决方法,适合 Tkinte…...

和你的推式子过一辈子去吧。

问题 给定若干个数 \(a_1 \dots a_n\),\(q\) 次询问,或单点修改,或询问第 \(i\) 个数取 \([0,a_i]\) 中任意数时,\(n\) 个数异或和是 \(z\) 的方案数。 本题的正确做法应该是贪心,但是我的贪心能力为 \(0\),就十分诡异地发现这个东西可以推式子推出来。 一些记号:\(\tex…...

NKOJ全TJ计划——NP1397

题目内容 有一条河,左边一个石墩(A区)上有编号为\(1\backsim n\)的只青蛙,河中有个\(k\)荷叶(C区),还有个\(h\)石墩(D区),右边有一个石墩(B区),如下图所示。\(n\)只青蛙要过河(从左岸石墩A到右岸石墩B),规则为: 石墩上可以承受任意多只青蛙,荷叶只能承受一只青蛙(不论大…...

LT9211C 芯片使用

配置文件: LT9211C_Main.h DrvTtlRx.c 添加屏时序参数 ModTtlRx.h ModMipiTx.h...

枚举类型

在实际的编程应用中,有的变量只有几种可能的取值,譬如说一个家族的几个成员,性别的两种可能等等。C++为这种类型的变量的定义提供了enum关键字。要使用枚举类型的变量,首先需要先定义一个枚举类型名,再声明变量是该枚举类型的。 一、枚举类型的定义 1、定义方式: enum 枚…...

用 C++ + OpenCV + Tesseract 实现英文数字验证码识别(完整可跑)

本文展示如何用 C++ 结合 OpenCV 做图像预处理,再调用 Tesseract OCR 识别验证码。适用于希望在高性能后端或本地服务里集成 OCR 的场景。方案包含: 环境与依赖安装 图像预处理(灰度、二值化、形态学去噪、放大) 使用 Tesseract API 调用(设定白名单、PSM) 完整 C++ 示例…...