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

Trick——数据结构

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.jsqmd.com/news/47881/

相关文章:

  • 锂矿及其投资机会
  • 电梯调度迭代编程作业复盘:从问题剖析到能力进阶
  • MORL | Envelope Q-Learning:有收敛性保证的 MORL 算法
  • 获深圳人才集团认可!「张张讲AI」AI资讯公众号解读AI动态,讲师提供定制化咨询
  • 多重背包 二进制拆分这个向左移动以为是2也是被我写出来了
  • why exams are bad
  • 若依框架源码—2
  • http linux
  • html空间能用于表单吗
  • html空间能用于布局吗
  • 01 背包不可达一维
  • 01背包不可达状态 二维的
  • 实用指南:阮一峰《TypeScript 教程》学习笔记——类型断言
  • Unable to add window -- token null is not valid; is your activity running?
  • PySpark -
  • 打造你的超级学习流:Chrome + ChatGPT Sidebar + Anki 全流程整合
  • html空间怎样设置边距
  • 单步电梯调度系统总结
  • html空间怎样实现浮动
  • 扩散模型变天?何恺明发布JiT架构,揭示高维空间预测的真相
  • 完整教程:LLama 3分组查询注意力与KV缓存机制
  • #关于对[淄博市实验中学]高一31班某同学实施严重校园欺凌及校方处置不力问题的举报信
  • 使用routers自动生成路由的路由器设计原则,类视图设计原则,序列化器类的设计原则
  • 团队作业3:需求改进与系统设计
  • 软件工程团队作业3
  • [洛谷-P1364] 医院设置
  • 实现五折交叉验证进行模型训练 -
  • KingbaseES:为银行核心系统迁移开启新航道 - 详解
  • 用 ffmpeg 命令去除视频的重复帧、剪视频、修改视频尺寸 - 详解
  • 20232422 2025-2026-1 《网络与系统攻防技术》实验六实验报告