恭喜你 以分块的姿势通过了此题

#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 【模板】二逼平衡树(树套树)相关推荐

  1. BZOJ3196 二逼平衡树 ZKW线段树套vector(滑稽)

    我实在是不想再打一遍树状数组套替罪羊树了... 然后在普通平衡树瞎逛的时候找到了以前看过vector题解 于是我想:为啥不把平衡树换成vector呢??? 然后我又去学了一下ZKW线段树 就用ZKW线 ...

  2. 洛谷 P3380 bzoj3196 Tyvj1730 【模板】二逼平衡树(树套树)

    [模板]二逼平衡树(树套树) 题目描述 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作: 查询k在区间内的排名 查询区间内排名为k的值 修改某一位值上的数值 查询k在 ...

  3. P3380 【模板】二逼平衡树(树套树)

    传送门 查询 kkk 在区间内的排名 查询区间内排名为 kkk的值 修改某一位值上的数值 查询 kkk 在区间内的前驱(前驱定义为严格小于 xxx,且最大的数,若不存在输出 −2147483647-2 ...

  4. [luogu3380][bzoj3196]【模板】二逼平衡树【树套树】

    题目地址 [洛谷传送门] 题目大意 区间查询k的排名,查找k排名的数,单点修改,区间前驱,区间后继. 感想 真的第一次写树套树,整个人都不对了.重构代码2次,发现样例都过不了,splay直接爆炸,可能 ...

  5. 【BZOJ-3196】二逼平衡树 线段树 + Splay (线段树套平衡树)

    3196: Tyvj 1730 二逼平衡树 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 2271  Solved: 935 [Submit][St ...

  6. 【Luogu】P3380树套树模板(线段树套Splay)

    题目链接 幸甚至哉,歌以咏志. 拿下了曾经是那么遥不可及的线段树,学会了曾经高不可攀的平衡树,弄懂了装B的时候才挂在嘴边的树套树. 每道模板都是链上的一颗珠子.把它们挨个串起来,就成为我成长的历程. ...

  7. 【BZOJ3196】【Tyvj1730】二逼平衡树,第一次的树套树(线段树+splay)

    传送门1 传送门2 写在前面:创造迄今最长的正常代码的记录 思路:个人感觉这个树套树就是对线段树的每个区间建一棵splay来维护,最初觉得这个方法会爆T爆M--(实际上真的可能会爆).对于5个操作,我 ...

  8. Bzoj 3196 Tyvj 1730 二逼平衡树

    3196: Tyvj 1730 二逼平衡树 >原题链接< Description 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作: 1.查询k在区间内的排 ...

  9. 树套树-线段树套平衡树

    作用 线段树的作用是区间修改和查询,平衡树的作用是查询第k大,k的排名,前驱,后继.这两个结合起来,就变成了可以区间修改和查询第k大,k的排名,前驱,后继的数据结构:树套树-线段树套平衡树. 实现 先 ...

  10. 【BZOJ3196】Tyvj 1730 二逼平衡树

    Description 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作: 1.查询k在区间内的排名 2.查询区间内排名为k的值 3.修改某一位值上的数值 4.查询k在 ...

最新文章

  1. 【错误记录】应用运行 CPU 占用率达到 90% ( 使用 CPU Profiler 监控应用运行情况 )
  2. CocoaPods 错误解决 Attempt to read non existent folder
  3. html表单显示提示,html侧栏对应表单的提示显示
  4. Beam Search还能更快?结合优先队列的最佳优先化Beam Search
  5. Boost.Flyweight 键值测试的类
  6. 服务器操作系统字符集,设置服务器字符集
  7. 朴素贝叶斯分类器python_朴素贝叶斯分类器及Python实现
  8. 学术会议墙报_中国化学会第十四届全国电分析化学学术会议在南京顺利召开
  9. 红橙Darren视频笔记 Handler源码简析与handler框架模拟 ThreadLocal
  10. Iometer存储测试工具参数说明-图形主界面(整理)
  11. safari无法调试iphone提示“无可检查的应用程序”的解决方法
  12. 【MyBean调试笔记】接口的使用和清理
  13. C#实现10进制转2进制
  14. 2022化工自动化控制仪表复训题库及模拟考试
  15. 对算法的认识——逻辑回归
  16. matlab多元函数求导数,MATLAB多元函数导数 - 范文中心
  17. 解决Gmail不能正常登录的问题,并推荐几个小窍门 [转]
  18. 饭店点餐系统之系统工作流程
  19. 网站被攻击了怎么处理
  20. Using GDB To Trace Into a Parallel Worker Spawned By Postmaster During a Large Query

热门文章

  1. 全国计算机等级考试题库二级C操作题100套(第96套)
  2. 向日葵在mac不能以服务器运行吗,mac远程桌面连接在哪?向日葵可以实现mac远程连接吗?...
  3. 嵌入式linux 自动获取IP 及 自动校时
  4. mac下SecureCRT连接阿里云服务器最新教程
  5. 嵌入式C语言基础链表
  6. 原生js追加html代码,原生js实现给指定元素的后面追加内容
  7. Eclipse中弹出OLE Exception窗口
  8. 移动设备web文字单位_移动设备如何塑造现代Web设计
  9. 统计学习方法概论---分类问题
  10. 【活动】AI人工智能技术沙龙 |杭州站