博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu 2665 划分树模板
阅读量:6243 次
发布时间:2019-06-22

本文共 2046 字,大约阅读时间需要 6 分钟。

划分树:主要用于快速求出(在log(n)的时间复杂度内)序列区间的第k大值。

哎呀,这里直接套用模板了。总感觉自己有点太急了,不管了。不用管别人怎么看了,自己做好就行啦啦啦啦啦,太做作的东西太不习惯了。

 poj 2104,2761 基本一样

同样的给出图,方便理解其方法:

 

代码:

#include
#include
#include
#include
using namespace std;const int MAXN=100010;int tree[30][MAXN];//表示每层每个位置的值int sorted[MAXN];//已经排序的数int toleft[30][MAXN];//toleft[p][i]表示第i层从1到i有多少个数分入左边void build(int l,int r,int dep){ if(l==r)return; int mid=(l+r)>>1; int same=mid-l+1;//表示等于中间值而且被分入左边的个数 for(int i=l;i<=r;i++) if(tree[dep][i]
0) { tree[dep+1][lpos++]=tree[dep][i]; same--; } else //比中间值大分入右边 tree[dep+1][rpos++]=tree[dep][i]; toleft[dep][i]=toleft[dep][l-1]+lpos-l;//从1到i放左边的个数 } build(l,mid,dep+1); build(mid+1,r,dep+1);}//查询区间第k大的数,[L,R]是大区间,[l,r]是要查询的小区间int query(int L,int R,int l,int r,int dep,int k){ if(l==r)return tree[dep][l]; int mid=(L+R)>>1; int cnt=toleft[dep][r]-toleft[dep][l-1];//[l,r]中位于左边的个数 if(cnt>=k) { //L+要查询的区间前被放在左边的个数 int newl=L+toleft[dep][l-1]-toleft[dep][L-1]; //左端点加上查询区间会被放在左边的个数 int newr=newl+cnt-1; return query(L,mid,newl,newr,dep+1,k); } else { int newr=r+toleft[dep][R]-toleft[dep][r]; int newl=newr-(r-l-cnt); return query(mid+1,R,newl,newr,dep+1,k-cnt); }}int main(){ //freopen("in.txt","r",stdin); //freopen("out.txt","w",stdout); int T; int n,m; int s,t,k; scanf("%d",&T); while(T--) { scanf("%d%d",&n,&m); memset(tree,0,sizeof(tree)); //这个必须 for(int i=1;i<=n;i++) //从1开始 { scanf("%d",&tree[0][i]); sorted[i]=tree[0][i]; } sort(sorted+1,sorted+n+1); build(1,n,0); while(m--) { scanf("%d%d%d",&s,&t,&k); printf("%d\n",query(1,n,s,t,0,k)); } } return 0;}

转载于:https://www.cnblogs.com/amourjun/archive/2013/04/09/5134191.html

你可能感兴趣的文章
Linux常用命令
查看>>
Grub4Dos 手动引导指令
查看>>
C# 有道API翻译 查询单词详细信息
查看>>
android 录像提示音问题
查看>>
纯CSS制作各种图形(多图预警)
查看>>
程序员如何获取招聘信息
查看>>
水平滑动,记录当前状态、利用浏览器原生播放器播放视频和vue-video-player视频播放插件、基于museUI的音频播放和vue-player插件实现音频播放...
查看>>
Kaa IoT平台学习(一)
查看>>
深入了解JVM虚拟机8:Java的编译期优化与运行期优化
查看>>
使用Nagios打造专业的业务状态监控
查看>>
单例模式(java&iOS)
查看>>
重拾Java(8)-反射
查看>>
有没有可以共享的桌面便签?
查看>>
Mars说光场(3)— 光场采集
查看>>
24、商品列表页之数据渲染和传值
查看>>
源码分析-react3-创建dom
查看>>
C# 获取QQ好友列表信息的实现
查看>>
System.ComponentModel.Win32Exception解决方案
查看>>
设计模式之死磕策略模式(原创)
查看>>
IDEA无法导入Maven工程
查看>>