51nod1174【基于线段树的RMQ】
来源:互联网 发布:开启手机休眠关闭网络 编辑:程序博客网 时间:2024/05/17 01:42
很基础啊~
#include <bits/stdc++.h>using namespace std;typedef long long LL;const int INF=-0x3f3f3f3f;const int N=1e4+10;struct asd{ int left; int right; int w;};asd q[N*4];void Build(int num,int L,int R){ q[num].left=L; q[num].right=R; if(L==R) { scanf("%d",&q[num].w); return; } Build(2*num,L,(L+R)/2); Build(2*num+1,(L+R)/2+1,R); q[num].w=max(q[2*num].w,q[2*num+1].w);}int query(int num,int s,int t){ if(s<=q[num].left&&t>=q[num].right) return q[num].w; if(q[num].right==q[num].left) return q[num].w; int mid=(s+t)/2; if(mid>=t) return query(2*num,s,t); else if(mid<s) return query(2*num+1,s,t); else return max(query(2*num,s,mid),query(2*num+1,mid+1,t));}int get_maxa(int num,int s,int t){ if(s<=q[num].left&&t>=q[num].right) return q[num].w; int mid=(q[num].left+q[num].right)/2; if(mid>=t) return get_maxa(2*num,s,t); else if(mid<s) return get_maxa(2*num+1,s,t); else return max(get_maxa(2*num,s,mid),get_maxa(2*num+1,mid+1,t));}int main(){ int x,y,n,q; scanf("%d",&n); Build(1,1,n); scanf("%d",&q); while(q--) { scanf("%d%d",&x,&y); printf("%d\n",get_maxa(1,x+1,y+1)); } return 0;}
0 0
- 51nod1174【基于线段树的RMQ】
- 51Nod1174 区间中最大的数(学习线段树)
- 基于线段树的RMQ
- 51nod1174区间最大数(RMQ)
- 51nod1174 区间中最大的数
- 基于稀疏表和线段树的区间最值查询(RMQ)问题
- RMQ问题的线段树解法
- 区间rmq的zkw线段树
- poj3368(线段树,RMQ)
- 线段树/RMQ问题
- 线段树RMQ
- VJ16216/RMQ/线段树
- 线段树求RMQ
- 线段树 Circular RMQ
- 线段树和rmq
- 基于RMQ的LCA
- sicily 1800 线段树RMQ
- RMQ(线段树实现)
- 编译器内置宏
- objc - 编译Runtime源码objc4-680
- Android之PowerManager电源管理
- 字符串类之间转化 StringBuffer类-->String类 String类-->StringBuffer类
- 人生经验 电脑对于程序员有何意义?
- 51nod1174【基于线段树的RMQ】
- Git Rebase基础
- 手动下载VMware Tolls.ISO
- css 背景透明,文字不透明
- Android自由开发者 通过Jsoup抓取网页数据
- 关于autohotkey的一些文章
- mysql5.7版本安装出现的问题
- zabbix一键安装脚本
- CCF 有趣的数