Range Minimum Query (RMQ)

Write a program which manipulates a sequence A = {a0,a1,...,an−1} with the following operations:

  • find(s,t): report the mimimum element in as,as+1,...,at.
  • update(i,x): change ai to x.

Note that the initial values of ai (i=0,1,...,n−1) are 231-1.

Input

n q
com0 x0 y0
com1 x1 y1
...
comq−1 xq−1 yq−1

In the first line, n (the number of elements in A) and q (the number of queries) are given. Then, q queries are given where com represents the type of queries. '0' denotes update(xi,yi) and '1' denotes find(xi,yi).

Output

For each find operation, print the minimum element.

Constraints

  • 1≤n≤100000
  • 1≤q≤100000
  • If comi is 0, then 0≤xi<n0≤yi<231−1.
  • If comi is 1, then 0≤xi<n0≤yi<n.

Sample Input 1

3 5
0 0 1
0 1 2
0 2 3
1 0 2
1 1 2

Sample Output 1

1
2

Sample Input 2

1 3
1 0 0
0 0 5
1 0 0

Sample Output 2

2147483647
5

 
 

带修改的区间最小值查询,线段树模板题。压了压常数,又打榜了。

 #include <cstdio>

 inline int min(const int &a, const int &b) {
return a < b ? a : b;
} #define siz 10000000 char buf[siz], *bit = buf; inline int nextInt(void) {
register int ret = ;
register int neg = false; for (; *bit < ''; ++bit)
if (*bit == '-')neg ^= true; for (; *bit >= ''; ++bit)
ret = ret * + *bit - ''; return neg ? -ret : ret;
} #define inf 2147483647 int n, m, mini[]; int find(int t, int l, int r, int x, int y) {
if (x <= l && r <= y)
return mini[t];
int mid = (l + r) >> ;
if (y <= mid)
return find(t << , l, mid, x, y);
if (x > mid)
return find(t << | , mid + , r, x, y);
else
return min(
find(t << , l, mid, x, mid),
find(t << | , mid + , r, mid + , y)
);
} void update(int t, int l, int r, int x, int y) {
if (l == r)mini[t] = y;
else {
int mid = (l + r) >> ;
if (x <= mid)
update(t << , l, mid, x, y);
else
update(t << | , mid + , r, x, y);
mini[t] = min(mini[t << ], mini[t << | ]);
}
} signed main(void) {
fread(buf, , siz, stdin); n = nextInt();
m = nextInt(); for (int i = ; i <= (n << ); ++i)mini[i] = inf; for (int i = ; i <= m; ++i) {
int c = nextInt();
int x = nextInt();
int y = nextInt();
if (c) // find(x, y)
printf("%d\n", find(, , n, x + , y + ));
else // update(x, y)
update(, , n, x + , y);
} // system("pause");
}

@Author: YouSiki

AOJ DSL_2_A Range Minimum Query (RMQ)的更多相关文章

  1. Geeks - Range Minimum Query RMQ范围最小值查询

    使用线段树预处理.能够使得查询RMQ时间效率在O(lgn). 线段树是记录某范围内的最小值. 标准的线段树应用. Geeks上仅仅有两道线段树的题目了.并且没有讲到pushUp和pushDown操作. ...

  2. Range Minimum Query and Lowest Common Ancestor

    作者:danielp 出处:http://community.topcoder.com/tc?module=Static&d1=tutorials&d2=lowestCommonAnc ...

  3. AOJ DSL_2_E Range Add Query (RAQ)

    Range Add Query 数列 A = {a1,a2,...,an} に対し.次の2つの操作を行うプログラムを作成せよ. add(s,t,x): as,as+1,...,at にxを加算する. ...

  4. AOJ DSL_2_D Range Update Query (RUQ)

    Range Update Query 数列 A = {a0,a1 ,...,an−1} に対し.次の2つの操作を行うプログラムを作成せよ. update(s,t,x): as,as+1,...,at  ...

  5. RMQ(Range Minimum Query)问题(转)

    问题描述 RMQ问题是求给定区间中的最值问题.对于长度为n的数列A,回答若干查询RMQ(A, i, j).返回数组A中下标在[i,j]里的最小值的下标. 比如数列 5,8,1,3,6,4,9,5,7 ...

  6. Segment Tree Range Minimum Query.

    int rangeMinQuery(int segTree[], int qlow, int qhigh, int low, int high, int pos) { if (qlow <= l ...

  7. RMQ (Range Minimal Query) 问题 ,稀疏表 ST

    RMQ ( 范围最小值查询 ) 问题是一种动态查询问题,它不需要修改元素,但要及时回答出数组 A 在区间 [l, r] 中最小的元素值. RMQ(Range Minimum/Maximum Query ...

  8. [LeetCode] Range Sum Query 2D - Mutable 二维区域和检索 - 可变

    Given a 2D matrix matrix, find the sum of the elements inside the rectangle defined by its upper lef ...

  9. [LeetCode] Range Sum Query - Mutable 区域和检索 - 可变

    Given an integer array nums, find the sum of the elements between indices i and j (i ≤ j), inclusive ...

随机推荐

  1. ViewStub源码分析

    ViewStub是一种特殊的View,Android官方给出的解释是:一种不可见的(GONE).size是0的占位view,多用于运行时 延迟加载的,也就是说真正需要某个view的时候.在实际项目中, ...

  2. iOS 学习 - 19 结构体

    //创建新类型typedef struct { int age; ];//最大字节为 20 }Student; Student value2 = {,*strcpy(value2.name, &quo ...

  3. FMDB基本使用

    1.打开数据库 #import "ViewController.h" #import "FMDB.h" @interface ViewController () ...

  4. 基于显卡的光栅化渲染器Gaius计划

    决定实现一个基于显卡的光栅化渲染器,能将一些基于显卡的新算法融入其中.

  5. rails中的session

    学rails toturial的时候,第八章一直觉得有点没吃透,后来看了两篇rails关于session和cookies源码分析的文章,cookie原理与实现(rails篇) 和session原理与实 ...

  6. iPhone被盗后续更新二:被换机!已取机!没扣住新机!怎么找新机呢?事发半年后跟进...

    先说下情况 MEID/IMEI:3544 2706 9380 456 我的序列号:F17NL088G5MY 新的IMEI:3569 7606 5956 097 新的序列号:DNPNV69ZG5MY 我 ...

  7. Linux命令学习总结:pwd命令

    命令简介: 该命令用来显示目前所在的工作目录.指令英文原义:print work directory 执行权限    :All User 指令所在路径:/usr/bin/pwd 或 /bin/pwd ...

  8. .NET应用架构设计—面向对象分析与设计四色原型模式(彩色建模、领域无关模型)(概念版)

    阅读目录: 1.背景介绍 2.问自己,UML对你来说有意义吗?它帮助过你对系统进行分析.建模吗? 3.一直以来其实我们被一个缝隙隔开了,使我们对OOAD遥不可及 4.四色原型模式填补这个历史缝隙,让我 ...

  9. Autofac在MVC4中牛刀小试

    Autofac是传说中速度最快的一套.NET高效的依赖注入框架.Autofac的介绍与使用请去参考Autofac全面解析系列(版本:3.5).   这里介绍的已经挺详细的啦. 下面我就先来说说MVC4 ...

  10. sizeof

    一.sizeof使用的场合: 1.sizeof操作符的一个主要用途是与存储分配和I/O系统那样的例程进行通信.例如: void* malloc(size_t size); size_t fread(v ...