单点更新 区间查询

#include <bits/stdc++.h>
using namespace std;
#define m ((l+r)/2)
#define ls (rt<<1)
#define rs (rt<<1|1)
const int N = 2e6+; int s[N], tr[N]; void build(int rt,int l,int r)
{
if(l == r) {
tr[rt] = s[l];
return ;
}
build(ls, l, m);
build(rs, m+, r);
tr[rt] = min(tr[ls], tr[rs]);
} void update(int rt,int l,int r,int pos,int val)
{
if(l == r && l == pos) {
tr[rt] = val;
return ;
}
if(pos <= m)
update(ls, l, m, pos, val);
else
update(rs, m+, r, pos, val);
tr[rt] = min(tr[ls], tr[rs]);
} int query(int rt,int l,int r,int L,int R)
{
if(L<=l && r<=R) {
return tr[rt];
}
int res = 0x3f3f3f3f;
if(L <= m)
res = min(res, query(ls,l,m,L,R));
if(R > m)
res = min(res, query(rs,m+,r,L,R));
return res;
}
void out(int rt,int l,int r)
{
printf("%d %d %d\n", l, r, tr[rt]);
if(l == r ) {
return ;
}
out(ls, l, m);
out(rs, m+, r);
}
int main()
{
freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
int n; scanf("%d", &n);
for(int i=; i<=n; i++) {
scanf("%d", &s[i]);
}
build(,,n);
// out(1,1,n);
int t; scanf("%d", &t);
while(t--) {
int op,l,r;
scanf("%d %d %d", &op, &l, &r);
if(op) {
update(,,n,l,r);
//out(1,1,n);
}
else {
printf("%d\n", query(,,n,l,r));
}
// out(1,1,n);
}
return ;
}

hihoCoder week19 RMQ问题再临-线段树 单点更新 区间查询的更多相关文章

  1. HDU.1166 敌兵布阵 (线段树 单点更新 区间查询)

    HDU.1166 敌兵布阵 (线段树 单点更新 区间查询) 题意分析 加深理解,重写一遍 代码总览 #include <bits/stdc++.h> #define nmax 100000 ...

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

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

  3. NYOJ-568/1012//UVA-12299RMQ with Shifts,线段树单点更新+区间查询

    RMQ with Shifts 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 ->  Link1  <- -> Link2  <- 以上两题题意是一样 ...

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

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

  5. HDU 1166敌兵布阵+NOJv2 1025: Hkhv love spent money(线段树单点更新区间查询)

    敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  6. HDU1166(线段树单点更新区间查询)

    敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  7. HDU 1754.I Hate It-结构体版线段树(单点更新+区间查询最值)

    I Hate It Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total S ...

  8. CDOJ 1073 线段树 单点更新+区间查询 水题

    H - 秋实大哥与线段树 Time Limit:1000MS     Memory Limit:65535KB     64bit IO Format:%lld & %llu Submit S ...

  9. Who Gets the Most Candies? POJ - 2886(线段树单点更新+区间查询+反素数)

    预备知识:反素数解析 思路:有了反素数的解法之后就是线段树的事了. 我们可以用线段树来维护哪些人被淘汰,哪些人没被淘汰,被淘汰的人的位置,没被淘汰的人的位置. 我们可以把所有人表示为一个[1,n]的区 ...

随机推荐

  1. django user 权限

     Django中的Users权限系统 2011-05-21 15:04:33 分类: Python/Ruby 权限系统包含1.用户2.权限(判断一个用户是否有特定的操作权限yes/no)3.组4.消息 ...

  2. double,失去精度

    double,失去精度: amount.doubleValue() * 使用 BigDecimal: public static double add(double d1,double d2){ Bi ...

  3. Python 构造一个可接受任意数量参数的函数

    为了能让一个函数接受任意数量的位置参数,可以使用一个* 参数 在这个例子中,rest 是由所有其他位置参数组成的元组.然后我们在代码中把它当成了一个序列来进行后续的计算

  4. 设计模式之Mediator(中介者)(转)

    Mediator定义: 用一个中介对象来封装一系列关于对象交互行为. 为何使用Mediator? 各个对象之间的交互操作非常多;每个对象的行为操作都依赖彼此对方,修改一个对象的行为,同时会涉及到修改很 ...

  5. Hadoop常用命令总结

    一.前述 分享一篇hadoop的常用命令的总结,将常用的Hadoop命令总结如下. 二.具体 1.启动hadoop所有进程start-all.sh等价于start-dfs.sh + start-yar ...

  6. LUHN 模10 算法 银行卡校验

    信用卡Luhn算法(模10)具体的校验过程如下: 1.从卡号最后一位数字开始,逆向将奇数位(1.3.5等等)相加. 2.从卡号最后一位数字开始,逆向将偶数位数字,先乘以2(如果乘积为两位数,则将其减去 ...

  7. linux mysql主从复制

    centos7 安装 mariadb 1 yum 源  -- 配置阿里的 2 rmp 方式 3 源码编译方式  -- 专业DBA 一些知识点: 虚拟环境 不影响 redis/ mariadb/mysq ...

  8. nginx实现MySQL负载均衡

    默认Nginx只支持http的反向代理,要想nginx支持tcp的反向代理,还需要在编译时增加tcp代理模块支持,即nginx_tcp_proxy_module 下面操作步骤只让nginx支持tcp_ ...

  9. Spring IOC 和 AOP

    一. IOC 1. 概念及原理 IOC: Inversion of Control(控制反转)是一种设计思想,就是容器控制应用程序所需要的外部资源的创建和管理,然后将其反转给应用程序.对象及其依赖对象 ...

  10. MyEclipse如何清除废弃的工作空间

    1.MyEclipse如何清除废弃的工作空间Windows--->Preferences--->General--->Startup and Shutdown--->Works ...