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 ...
随机推荐
- powerdesigner设置主键为自增字段,设置非主键为唯一键并作为表的外键
转自:https://www.cnblogs.com/CoffeeHome/archive/2014/06/04/3767501.html 这里powerdesigner连接的数据库是以mysql为例 ...
- Asset Catalog Help (六)---Adding OS X Icons
Adding OS X Icons Simplify image management by storing your OS X icons in an asset catalog. 把OS X图标存 ...
- Flutter实战视频-移动电商-40.路由_Fluro的全局注入和使用方法
40.路由_Fluro的全局注入和使用方法 路由注册到顶层,使每个页面都可以使用,注册到顶层就需要在main.dart中 main.dart注册路由 注入 onGenerateRoute是Materi ...
- LeetCode: 557Reverse Words in a String III(easy)
题目: Given a string, you need to reverse the order of characters in each word within a sentence while ...
- E20190303-hm
invoke vt. 乞灵,祈求; 提出或授引…以支持或证明; 召鬼; 借助;
- Unity中HideInInspector和SerializeField
http://blog.sina.com.cn/s/blog_697b1b8c0102uxvn.html Unity会自动为Public变量做序列化,序列化的意思是说再次读取Unity时序列化的变量是 ...
- ZooKeeper-3.3.4集群安装配置(转载)
ZooKeeper是一个分布式开源框架,提供了协调分布式应用的基本服务,它向外部应用暴露一组通用服务——分布式同步(Distributed Synchronization).命名服务(Naming S ...
- day01 包 权限修饰符 static final
- hdu 6319 Problem A. Ascending Rating (2018 Multi-University Training Contest 3)
#include <stdio.h> #include <iostream> #include <cstdlib> #include <cmath> # ...
- C#静态类、静态构造函数,类与结构体的比较
一.静态类 静态类是不能实例化的,我们直接使用它的属性与方法,静态类最大的特点就是共享. 探究 public static class StaticTestClass{ public stati ...