Trick——数据结构

news/2025/11/22 21:32:00/文章来源:https://www.cnblogs.com/zhoulemon/p/19258643

Part1

你真的以为树状数组只能止步于区修区查了吗?
实际上有这样一种特殊的最值:前缀最值查询。
代码:

struct BIT{int tr[N];inline int lowbit(int x){ return (x&(-x)); }void add(int x,int val){for(int i=x;i<=n;i+=lowbit(i))tr[i]=max(tr[i],val);}int query(int x){int ans=0;for(int i=x;i;i-=lowbit(i))ans=max(ans,tr[i]);return ans;}void clear(int x){for(int i=x;i<=n;i+=lowbit(i))tr[i]=0;}
}; 

这种操作被广泛用于偏序问题。

Part2

动态开点平衡树。(没想到吧)
思想就是一个节点代表一个区间,必要时拆点即可。
由于拆点之后中序遍历顺序不能改变,所以不能用 \(Treap\)

拆点代码:
int split(int x,int k){int l=tr[x].l,r=tr[x].r;if(l==r)return x;if(k==1){int id1=newnode(l,l),id2=newnode(l+1,r);tr[tr[x].fa].ch[dir(x)]=id2,tr[id2].fa=tr[x].fa;tr[id2].ch[0]=id1,tr[id1].fa=id2;if(tr[x].ch[0])tr[tr[x].ch[0]].fa=id1,tr[id1].ch[0]=tr[x].ch[0];if(tr[x].ch[1])tr[tr[x].ch[1]].fa=id2,tr[id2].ch[1]=tr[x].ch[1];push_up(id1),se.add(rot,l,l,id1,1,M);push_up(id2),se.add(rot,l+1,r,id2,1,M);if(root==x)root=id2; return id1;}else if(k==r-l+1){int id1=newnode(l,r-1),id2=newnode(r,r);tr[tr[x].fa].ch[dir(x)]=id2,tr[id2].fa=tr[x].fa;tr[id2].ch[0]=id1,tr[id1].fa=id2;if(tr[x].ch[0])tr[tr[x].ch[0]].fa=id1,tr[id1].ch[0]=tr[x].ch[0];if(tr[x].ch[1])tr[tr[x].ch[1]].fa=id2,tr[id2].ch[1]=tr[x].ch[1];push_up(id1),se.add(rot,l,r-1,id1,1,M);push_up(id2),se.add(rot,r,r,id2,1,M);if(root==x)root=id2; return id2;}else {int id1=newnode(l,l+k-2),id2=newnode(l+k-1,l+k-1),id3=newnode(l+k,r);tr[tr[x].fa].ch[dir(x)]=id2,tr[id2].fa=tr[x].fa;tr[id2].ch[0]=id1,tr[id1].fa=id2;tr[id2].ch[1]=id3,tr[id3].fa=id2;if(tr[x].ch[0])tr[tr[x].ch[0]].fa=id1,tr[id1].ch[0]=tr[x].ch[0];if(tr[x].ch[1])tr[tr[x].ch[1]].fa=id3,tr[id3].ch[1]=tr[x].ch[1];push_up(id1),se.add(rot,l,l+k-2,id1,1,M);push_up(id3),se.add(rot,l+k,r,id3,1,M);push_up(id2),se.add(rot,l+k-1,l+k-1,id2,1,M);if(root==x)root=id2; return id2;}
}

常数略大

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/973434.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

锂矿及其投资机会

锂矿公司 锂辉石矿 天齐锂业 矿产资源介绍:控股澳大利亚泰利森公司,手握全球最大硬岩锂矿 —— 格林布什锂辉石矿,权益储量达 1614 万吨 LCE,同时还布局了四川措拉锂辉石矿,资源自给率达 100%,其电池级氢氧化锂技…

电梯调度迭代编程作业复盘:从问题剖析到能力进阶

一、对三次电梯调度题目集的整体认知 (一)知识点覆盖与考察重点 三次电梯调度题目集聚焦面向对象编程核心知识点与工程化开发能力,核心考察内容可归纳为三类: 设计原则:核心是单一职责原则(SRP)。从第一次的 “…

MORL | Envelope Q-Learning:有收敛性保证的 MORL 算法

EQL 将单目标的 bellman 算子拓展到多目标 RL 上,并复刻了 value iteration 的收敛性保证。论文标题:A Generalized Algorithm for Multi-Objective Reinforcement Learning and Policy Adaptatio。 NeurIPS 2019。也…

获深圳人才集团认可!「张张讲AI」AI资讯公众号解读AI动态,讲师提供定制化咨询

获深圳人才集团认可!「张张讲AI」AI资讯公众号解读AI动态,讲师提供定制化咨询在人工智能快速发展的时代,各行各业都在努力融入这一新兴技术,以谋求更好的发展。而张张讲AI作为人工智能应用培训领域的重要力量,凭借…

多重背包 二进制拆分这个向左移动以为是2也是被我写出来了

include <bits/stdc++.h> using namespace std; int dp[105];int v[2000];int w[2000]; int main() { int c;cin>>c; while(c--) { int n,m;cin>>n>>m; memset(v,0,sizeof(v)); memset(w,0,si…

NOIP2025

NOIP2025前情提要:CSP-S 2025 \(100+80+50+24\)。。

why exams are bad

"i know many things, but professors just check the things I dont know!" it will hurt buddys confidence, let one think hes a loser. how much people understand Hebrew, Chinese or Japanese? how…

若依框架源码—2

若依框架——每一个模块的解读 模块分类模块图首先我们可以看到一共有六个模块 通过注释分析,我们可以得出,admin 模块 后端管理模块,项目的启动入口其中还包含了项目的配置文件common 模块 后端通用模块,通用的工…

http linux

您提到的“http linux”可能是指与 HTTP 相关的 Linux 操作系统相关的问题,或者是想了解在 Linux 系统中如何处理 HTTP 请求或相关服务。请提供更多具体问题或需求,以便我为您提供准确的 Linux 命令或脚本建议。例如…

html空间能用于表单吗

HTML空间(HTML Space)可以用于表单。HTML空间主要用于在HTML文档中插入不可见的特殊字符,这些字符在浏览器中不会显示,但可以在源代码中使用。在表单提交时,HTML空间中的字符也会被一起提交。因此,如果需要在表单…

html空间能用于布局吗

HTML空间本身并不直接用于布局,但HTML元素和CSS样式可以用于创建和控制网页的布局。HTML提供了页面结构,而CSS则负责样式和布局。以下是HTML和CSS在网页布局中的具体应用: HTML用于布局表格布局:虽然不推荐用于布局…

01 背包不可达一维

一维的一定要从头遍历进行分类 二维可以从f[i]因为他在继承新值 include <bits/stdc++.h> using namespace std; int j[1005]; int f[1005]; int dp[1005]; int main() { int m, n; while (cin >> m >…

数据结构——BF算法 - 指南

数据结构——BF算法 - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", …

01背包不可达状态 二维的

include <bits/stdc++.h> using namespace std; int j[1005]; int f[1005]; int dp[1005][1005]; int main() { int m, n; while (cin >> m >> n) { if (m == -1 && n == -1) break;memset(…

实用指南:阮一峰《TypeScript 教程》学习笔记——类型断言

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Unable to add window -- token null is not valid; is your activity running?

在Android中连续弹出两个Dialog就会出现下面的错误:android.view.WindowManager$BadTokenException: Unable to add window -- token null is not valid; is your activity running?at android.view.ViewRootImpl.set…

PySpark -

PySpark -Spark installed on WSL. Java installed on WSL. Jupyter ran on WSL:jupyter-lab --no-browser Code ran in Windows browser:spark = (SparkSession.builder.master(spark://ZZHPC.localdomain:7077).app…

打造你的超级学习流:Chrome + ChatGPT Sidebar + Anki 全流程整合

📘 Chrome + ChatGPT + Anki 快速集成方案(Markdown 版)#️⃣ 1. 解决了什么问题 你希望实现:在 Chrome 浏览器中使用 ChatGPT Sidebar 随时提问 选中文本/ChatGPT 输出内容后 右键 / 快捷键 一键加入 Anki(自动…

html空间怎样设置边距

在HTML中,设置元素的外边距通常使用CSS(层叠样式表)。以下是如何为HTML元素设置外边距的几种方法:内联样式:在HTML元素的标签内使用style属性。<div style="margin: 20px;">这个div有20像素的外边…

单步电梯调度系统总结

前言: 完成三次电梯大作业之后,我将对题目重新进行设计与分析,对知识点、题型难度、题量等进行总结,以及提出踩坑心得和改进建议。 一、知识点 1.基础知识点 (1)基本语法 标识符与关键字:使用static final定义常量…