hihoCode r#1077 : RMQ问题再临-线段树
思路:
两种实现方法: (1)用链表(2)用数组。
#include <bits/stdc++.h>
using namespace std;
int n, q, L, R, op, P, W; struct node
{
int v;
node *ll,*rr;
}; node* create() //创建节点
{
node *tmp=new(node);
tmp->v=-;
tmp->ll=tmp->rr=;
return tmp;
} node* init_tree(int l,int r) //初始化树
{
node *tmp=create();
if(l==r)
{
scanf("%d",&tmp->v);
return tmp;
}
tmp->ll=init_tree(l,(r+l)/);
tmp->rr=init_tree((r+l)/+,r);
tmp->v= tmp->ll->v < tmp->rr->v?tmp->ll->v:tmp->rr->v;
return tmp;
} int query(int l,int r,int LL,int RR,node *t) //查询(欲查询的左,右,区间下限,上限,根)
{
if(l==LL&&r==RR) return t->v;
int mid=((LL+RR)>>);
if(l>mid) return query(l, r, mid+, RR, t->rr);
if(r<=mid) return query(l, r, LL, mid, t->ll);
return min( query(l,mid,LL,mid,t->ll),query(mid+,r,mid+,RR,t->rr) );
} void update(int LL,int RR,node *t) //修改,深搜,搜到后一直往回改。
{
if(LL==RR)
{
t->v=W;
return ;
}
int mid=((LL+RR)>>);
int tmp;
if(P>mid) update(mid+,RR,t->rr); //要改的在右边
else update(LL,mid,t->ll);
t->v=min(t->ll->v,t->rr->v);
} int main()
{
freopen("input.txt", "r", stdin);
cin>>n;
node *tree=init_tree(,n);
cin>>q;
for(int i=; i<q; i++)
{
scanf("%d",&op);
if(op) //修改
{
scanf("%d%d",&P,&W);
update(,n,tree);
}
else //查询
{
scanf("%d%d",&L,&R);
printf("%d\n",query(L,R,,n,tree) );
}
}
return ;
}
AC代码(链实现)
hihoCode r#1077 : RMQ问题再临-线段树的更多相关文章
- hihocode 1077 : RMQ问题再临-线段树
#1077 : RMQ问题再临-线段树 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 上回说到:小Hi给小Ho出了这样一道问题:假设整个货架上从左到右摆放了N种商品,并 ...
- Hihocoder #1077 : RMQ问题再临-线段树(线段树:结构体建树+更新叶子往上+查询+巧妙使用father[]+线段树数组要开大4倍 *【模板】)
#1077 : RMQ问题再临-线段树 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 上回说到:小Hi给小Ho出了这样一道问题:假设整个货架上从左到右摆放了N种商品,并 ...
- hihoCoder#1077 RMQ问题再临-线段树
原题地址 终于做到线段树的题了,因为建树.更新.查询都是递归操作,所以其实挺好写的. 用数组存的树,记得MAX_NODE开成两倍叶节点数大小,否则RE啊..不要问我是怎么知道的. 代码: #inclu ...
- hihoCoder week19 RMQ问题再临-线段树 单点更新 区间查询
单点更新 区间查询 #include <bits/stdc++.h> using namespace std; #define m ((l+r)/2) #define ls (rt< ...
- [bzoj3339]Rmq Problem||[bzoj3585]mex_线段树
Rmq Problem bzoj-3339||mex bzoj-3585 题目大意:给定一个长度为n的数列a,多次讯问区间l,r中最小的不属于集合{$A_l,A_{l+1}...A_r$}的非负整数. ...
- CF803G-Periodic RMQ Problem【离散化,线段树,ST表】
正题 题目链接:https://www.luogu.com.cn/problem/CF803G 题目大意 一个长度为\(n\)的序列\(a\)复制\(k\)份连接,要求支持 区间赋值 区间查询最小值 ...
- NYOJ 1012 RMQ with Shifts (线段树)
题目链接 In the traditional RMQ (Range Minimum Query) problem, we have a static array A. Then for each q ...
- nyoj 568——RMQ with Shifts——————【线段树单点更新、区间求最值】
RMQ with Shifts 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 In the traditional RMQ (Range Minimum Q ...
- UVA 12299 RMQ with Shifts(线段树:单点更新)
题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem ...
随机推荐
- XAMPP打不开Apache服务的解决办法
XAMPP打不开Apache服务的解决办法 不用修改设置,应该是80端口被占用了,直接先IIS的网站给停了就OK
- 总结open与fopen的区别
https://www.zybuluo.com/yiltoncent/note/87461 参考链接1 参考链接2 对于这两个名字很类似的函数,对于很多初学者来说,不容易搞清楚它们有什么不同,只知道按 ...
- c/c++面试39-44之内存动态分配
39 指针的初始化(二叉树排序),其中引入了双向链表 #include <stdio.h> #include <stdlib.h> struct Tag_Node { stru ...
- UVa 1641 ASCII Area (计算几何,水题)
题意:给定一个矩阵,里面有一个多边形,求多边形的面积. 析:因为是在格子里,并且这个多边形是很规则的,所以所有格子不是全属于多边形就是全不属于,或者一半,并且我们可以根据"/"和“ ...
- 共相式GIS
今天看到SuperMap中一直提到共相式GIS,于是乎搜索一下……SuperMap的共相式怎么理解呢?iServer Java有咋理解呢??? 再谈共相式GIS和ArcObjects:ttp://ww ...
- hdu1847(sg函数&yy)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1847 题意:中文题诶- 思路:直接sg函数打表即可,观察打表的结果发现是有规律的,sg函数的值只为0, ...
- 设置上一级controller的backBarButtonItem
设置上一级controller的backBarButtonItem. self.navigationItem.backBarButtonItem= [[UIBarButtonItem alloc]in ...
- UINavigationController 的一些坑
坑一:自定义导航栏返回键 iOS7及之后版本 手势边缘右滑返回失效 解决方案: -(void)viewDidLoad{ [super viewDidLoad]; //self 为 UINavigati ...
- docker Mac安装和使用
1.安装docker brew cask install docker 2.安装后可以用命令查看版本 docker --version 3.build java 项目(jar) docker buil ...
- select查询---sql
SELECT 语句用于从数据库中选取数据. SQL SELECT 语句 SELECT 语句用于从数据库中选取数据. 结果被存储在一个结果表中,称为结果集. SQL SELECT 语法 SELECT c ...