思路:

  两种实现方法: (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问题再临-线段树的更多相关文章

  1. hihocode 1077 : RMQ问题再临-线段树

    #1077 : RMQ问题再临-线段树 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 上回说到:小Hi给小Ho出了这样一道问题:假设整个货架上从左到右摆放了N种商品,并 ...

  2. Hihocoder #1077 : RMQ问题再临-线段树(线段树:结构体建树+更新叶子往上+查询+巧妙使用father[]+线段树数组要开大4倍 *【模板】)

    #1077 : RMQ问题再临-线段树 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 上回说到:小Hi给小Ho出了这样一道问题:假设整个货架上从左到右摆放了N种商品,并 ...

  3. hihoCoder#1077 RMQ问题再临-线段树

    原题地址 终于做到线段树的题了,因为建树.更新.查询都是递归操作,所以其实挺好写的. 用数组存的树,记得MAX_NODE开成两倍叶节点数大小,否则RE啊..不要问我是怎么知道的. 代码: #inclu ...

  4. hihoCoder week19 RMQ问题再临-线段树 单点更新 区间查询

    单点更新 区间查询 #include <bits/stdc++.h> using namespace std; #define m ((l+r)/2) #define ls (rt< ...

  5. [bzoj3339]Rmq Problem||[bzoj3585]mex_线段树

    Rmq Problem bzoj-3339||mex bzoj-3585 题目大意:给定一个长度为n的数列a,多次讯问区间l,r中最小的不属于集合{$A_l,A_{l+1}...A_r$}的非负整数. ...

  6. CF803G-Periodic RMQ Problem【离散化,线段树,ST表】

    正题 题目链接:https://www.luogu.com.cn/problem/CF803G 题目大意 一个长度为\(n\)的序列\(a\)复制\(k\)份连接,要求支持 区间赋值 区间查询最小值 ...

  7. NYOJ 1012 RMQ with Shifts (线段树)

    题目链接 In the traditional RMQ (Range Minimum Query) problem, we have a static array A. Then for each q ...

  8. nyoj 568——RMQ with Shifts——————【线段树单点更新、区间求最值】

    RMQ with Shifts 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述     In the traditional RMQ (Range Minimum Q ...

  9. UVA 12299 RMQ with Shifts(线段树:单点更新)

    题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem ...

随机推荐

  1. 【Linux学习】Vi / Vim编辑器—编辑器工作模式、vi编辑操作

    Vi / Vim编辑器-编辑器工作模式.vi编辑操作 推荐一个很好的学习指南:http://www.oschina.net/translate/learn-vim-progressively 一.编辑 ...

  2. 02-安装JDK - Java快速入门

    jdk安装的版本

  3. [CVE-2014-3704]Drupal 7.31 SQL注入漏洞分析与复现

    记录下自己的复现思路 漏洞影响: Drupal 7.31 Drupal是一个开源内容管理平台,为数百万个网站和应用程序提供支持. 0x01漏洞复现 复现环境: 1) Apache2.4 2) Php ...

  4. Ubuntu16.04 安装Python3.6 报错

    问题: 在安装Python 3.6,执行make install 时出现以下错误: zipimport.ZipImportError: can't decompress data; zlib not ...

  5. CCF 201512-1 数位之和 (水题)

    问题描述 给定一个十进制整数n,输出n的各位数字之和. 输入格式 输入一个整数n. 输出格式 输出一个整数,表示答案. 样例输入 20151220 样例输出 13 样例说明 20151220的各位数字 ...

  6. Cocos2d-x 屏幕适配新解(比较全面比较详细)

    本文出自 [无间落叶]原文地址:http://blog.leafsoar.com/archives/2013/05-10-19.html 为了适应移动终端的各种分辨率大小,各种屏幕宽高比,在 coco ...

  7. jQuery 实现网页跳转或用命令打开指定网页!

    Jquery实现网页跳转或用命令打开指定网页! location.href = "www.baidu.com"; location.href = "aa.aspx&quo ...

  8. input输入框修改后自动跳到最后一个字符

    <input class="m-form-control" onpaste="return false" placeholder="直播间名称& ...

  9. MySQL之避免插入重复数据

    INSERT ignore INTO `$table_name`($field_name) VALUES(),(),(),()"; //若重复数据可以添加,请在对应的数据表字段中添加数据库索 ...

  10. 小程序隐藏或自定义 scroll-view滚动条

    css 隐藏滚动条 ::-webkit-scrollbar { width:; height:; color: transparent; } 自定义滚动条样式 ::-webkit-scrollbar ...