luogu P3380 【模板】二逼平衡树(树套树)
恭喜你 以分块的姿势通过了此题
#include<cmath> #include<cstdio> #include<algorithm> #define inf (2147483647) using namespace std; const int N=5e4+50; struct FK {int l,r;} K[500]; int n,m,T,sqr,ans,a[N],b[N],fa[N]; void work1(int l,int r,int x) {ans=0; if(fa[l]==fa[r]||fa[l]+1==fa[r]){for(int i=l;i<=r;i++) if(a[i]<x) ans++; return ;}for(int i=l;i<=K[fa[l]].r;i++) if(a[i]<x) ans++;for(int k=fa[l]+1;k<fa[r];k++){int L=K[k].l,R=K[k].r,res,mid;if(b[L]>=x) continue; while(L<=R){mid=(L+R)>>1; if(b[mid]<x) res=mid,L=mid+1; else R=mid-1;} ans+=(res-K[k].l+1); // 这里写成了 ans+=(res-L+1);L已经改变所以是错的。。。 }for(int i=K[fa[r]].l;i<=r;i++) if(a[i]<x) ans++; } int work2(int l,int r,int x) // 最大的不成立值的就是要找的答案 {int L=0,R=1e9,mid,res=0;while(L<=R){mid=(L+R)>>1; work1(l,r,mid);if(ans<x) res=mid,L=mid+1; else R=mid-1;} return res; } void work4(int l,int r,int x) {ans=-inf; if(fa[l]==fa[r]||fa[l]+1==fa[r]){for(int i=l;i<=r;i++) if(a[i]<x&&a[i]>ans) ans=a[i]; return ;}for(int i=l;i<=K[fa[l]].r;i++) if(a[i]<x&&a[i]>ans) ans=a[i];for(int k=fa[l]+1;k<fa[r];k++){int L=K[k].l,R=K[k].r,res,mid;if(b[L]>=x) continue; while(L<=R){mid=(L+R)>>1; if(b[mid]<x) res=mid,L=mid+1; else R=mid-1;} if(b[res]>ans) ans=b[res];}for(int i=K[fa[r]].l;i<=r;i++) if(a[i]<x&&a[i]>ans) ans=a[i]; } void work5(int l,int r,int x) {ans=inf; if(fa[l]==fa[r]||fa[l]+1==fa[r]){for(int i=l;i<=r;i++) if(a[i]>x&&a[i]<ans) ans=a[i]; return ;}for(int i=l;i<=K[fa[l]].r;i++) if(a[i]>x&&a[i]<ans) ans=a[i];for(int k=fa[l]+1;k<fa[r];k++){int L=K[k].l,R=K[k].r,res,mid;if(b[R]<=x) continue; while(L<=R){mid=(L+R)>>1; if(b[mid]>x) res=mid,R=mid-1; else L=mid+1;} if(b[res]<ans) ans=b[res];}for(int i=K[fa[r]].l;i<=r;i++) if(a[i]>x&&a[i]<ans) ans=a[i]; } int main() { // freopen("ask.in","r",stdin); // freopen("ask.out","w",stdout);scanf("%d%d",&n,&T); sqr=sqrt(n);for(int i=1;i<=n;i++)fa[i]=(i-1)/sqr+1,scanf("%d",&a[i]),b[i]=a[i];for(int i=1;i<=n;i+=sqr)K[++m].l=i,K[m].r=i+sqr-1; K[m].r=n;for(int i=1;i<=m;i++) sort(b+K[i].l,b+K[i].r+1);int op,l,r,x;while(T--){scanf("%d%d%d",&op,&l,&r);if(op==3){a[l]=r; int k=fa[l];for(int i=K[k].l;i<=K[k].r;i++) b[i]=a[i];sort(b+K[k].l,b+K[k].r+1); continue;}scanf("%d",&x); if(op==2) {printf("%d\n",work2(l,r,x));continue;}if(op==1) work1(l,r,x),ans++; else if(op==4) work4(l,r,x);else work5(l,r,x); printf("%d\n",ans);}return 0; }
转载于:https://www.cnblogs.com/lxy8584099/p/10338839.html
luogu P3380 【模板】二逼平衡树(树套树)相关推荐
- BZOJ3196 二逼平衡树 ZKW线段树套vector(滑稽)
我实在是不想再打一遍树状数组套替罪羊树了... 然后在普通平衡树瞎逛的时候找到了以前看过vector题解 于是我想:为啥不把平衡树换成vector呢??? 然后我又去学了一下ZKW线段树 就用ZKW线 ...
- 洛谷 P3380 bzoj3196 Tyvj1730 【模板】二逼平衡树(树套树)
[模板]二逼平衡树(树套树) 题目描述 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作: 查询k在区间内的排名 查询区间内排名为k的值 修改某一位值上的数值 查询k在 ...
- P3380 【模板】二逼平衡树(树套树)
传送门 查询 kkk 在区间内的排名 查询区间内排名为 kkk的值 修改某一位值上的数值 查询 kkk 在区间内的前驱(前驱定义为严格小于 xxx,且最大的数,若不存在输出 −2147483647-2 ...
- [luogu3380][bzoj3196]【模板】二逼平衡树【树套树】
题目地址 [洛谷传送门] 题目大意 区间查询k的排名,查找k排名的数,单点修改,区间前驱,区间后继. 感想 真的第一次写树套树,整个人都不对了.重构代码2次,发现样例都过不了,splay直接爆炸,可能 ...
- 【BZOJ-3196】二逼平衡树 线段树 + Splay (线段树套平衡树)
3196: Tyvj 1730 二逼平衡树 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 2271 Solved: 935 [Submit][St ...
- 【Luogu】P3380树套树模板(线段树套Splay)
题目链接 幸甚至哉,歌以咏志. 拿下了曾经是那么遥不可及的线段树,学会了曾经高不可攀的平衡树,弄懂了装B的时候才挂在嘴边的树套树. 每道模板都是链上的一颗珠子.把它们挨个串起来,就成为我成长的历程. ...
- 【BZOJ3196】【Tyvj1730】二逼平衡树,第一次的树套树(线段树+splay)
传送门1 传送门2 写在前面:创造迄今最长的正常代码的记录 思路:个人感觉这个树套树就是对线段树的每个区间建一棵splay来维护,最初觉得这个方法会爆T爆M--(实际上真的可能会爆).对于5个操作,我 ...
- Bzoj 3196 Tyvj 1730 二逼平衡树
3196: Tyvj 1730 二逼平衡树 >原题链接< Description 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作: 1.查询k在区间内的排 ...
- 树套树-线段树套平衡树
作用 线段树的作用是区间修改和查询,平衡树的作用是查询第k大,k的排名,前驱,后继.这两个结合起来,就变成了可以区间修改和查询第k大,k的排名,前驱,后继的数据结构:树套树-线段树套平衡树. 实现 先 ...
- 【BZOJ3196】Tyvj 1730 二逼平衡树
Description 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作: 1.查询k在区间内的排名 2.查询区间内排名为k的值 3.修改某一位值上的数值 4.查询k在 ...
最新文章
- 【错误记录】应用运行 CPU 占用率达到 90% ( 使用 CPU Profiler 监控应用运行情况 )
- CocoaPods 错误解决 Attempt to read non existent folder
- html表单显示提示,html侧栏对应表单的提示显示
- Beam Search还能更快?结合优先队列的最佳优先化Beam Search
- Boost.Flyweight 键值测试的类
- 服务器操作系统字符集,设置服务器字符集
- 朴素贝叶斯分类器python_朴素贝叶斯分类器及Python实现
- 学术会议墙报_中国化学会第十四届全国电分析化学学术会议在南京顺利召开
- 红橙Darren视频笔记 Handler源码简析与handler框架模拟 ThreadLocal
- Iometer存储测试工具参数说明-图形主界面(整理)
- safari无法调试iphone提示“无可检查的应用程序”的解决方法
- 【MyBean调试笔记】接口的使用和清理
- C#实现10进制转2进制
- 2022化工自动化控制仪表复训题库及模拟考试
- 对算法的认识——逻辑回归
- matlab多元函数求导数,MATLAB多元函数导数 - 范文中心
- 解决Gmail不能正常登录的问题,并推荐几个小窍门 [转]
- 饭店点餐系统之系统工作流程
- 网站被攻击了怎么处理
- Using GDB To Trace Into a Parallel Worker Spawned By Postmaster During a Large Query
热门文章
- 全国计算机等级考试题库二级C操作题100套(第96套)
- 向日葵在mac不能以服务器运行吗,mac远程桌面连接在哪?向日葵可以实现mac远程连接吗?...
- 嵌入式linux 自动获取IP 及 自动校时
- mac下SecureCRT连接阿里云服务器最新教程
- 嵌入式C语言基础链表
- 原生js追加html代码,原生js实现给指定元素的后面追加内容
- Eclipse中弹出OLE Exception窗口
- 移动设备web文字单位_移动设备如何塑造现代Web设计
- 统计学习方法概论---分类问题
- 【活动】AI人工智能技术沙龙 |杭州站