RMQ算法
来源:互联网 发布:单片机呼吸灯程序 编辑:程序博客网 时间:2024/06/05 15:36
求区间最值,多次询问、无更新,ST算法。
题目链接:http://hihocoder.com/problemset/problem/1068
code:
#include<stdio.h>#include<math.h>#include<string.h>#include<algorithm>using namespace std;const int N = 1e6+10;int dp[N][20];void init_RMQ(int num){ for(int j=1; (1<<j)<=num; j++) for(int i=0; i+(1<<(j-1))<num; i++) dp[i][j] = min(dp[i][j-1],dp[i+(1<<(j-1))][j-1]);}int RMQ(int l, int r){ int k = log2(r-l+1); return min(dp[l][k],dp[r-(1<<k)+1][k]);}int main(){ int n, q, L, R; while(~scanf("%d", &n)) { for(int i=0; i<n; i++) scanf("%d", &dp[i][0]); init_RMQ(n); scanf("%d", &q); while(q--) { scanf("%d%d", &L,&R); printf("%d\n", RMQ(L-1,R-1)); } } return 0;}
求区间的最值,其中有多次询问以及多次更新某一位数,利用线段树求解。
题目链接:http://hihocoder.com/problemset/problem/1077
code:
#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;#define INF 1<<30const int N = 1e6+10;int num, dat[4*N];//num为最小大于n的2的幂void build(int n){ num = 1; while(num < n) num *= 2; //为了简单起见,把元素个数扩大到2的幂 for(int i=0; i<2*num-1; i++) dat[i] = INF;}void update(int k, int v){ k += num-1; dat[k] = v; while(k > 0) { k = (k-1)/2; dat[k] = min(dat[k*2+1],dat[k*2+2]); }}int query(int x, int y, int k, int l, int r){ if(x >= r || y <= l) return INF; else if(x <= l && y >= r) return dat[k]; else { int vl = query(x, y, k*2+1, l, (l+r)/2); int vr = query(x, y, k*2+2, (l+r)/2, r); return min(vl,vr); }}int main(){ int n, a, q; while(~scanf("%d", &n)) { build(n); for(int i=0; i<n; i++) { scanf("%d", &a); update(i,a); } scanf("%d", &q); while(q--) { int t, x, y; scanf("%d%d%d", &t,&x,&y); if(t == 0) printf("%d\n", query(x-1,y,0,0,num)); //注意区间左闭右开 else update(x-1,y); } } return 0;}
0 0
- 【RMQ】RMQ算法
- RMQ算法
- RMQ算法
- RMQ算法
- RMQ算法
- RMQ算法
- RMQ算法
- RMQ算法
- RMQ算法
- RMQ算法
- rmq算法
- RMQ算法
- RMQ算法
- RMQ算法
- RMQ算法
- RMQ算法
- RMQ算法
- RMQ算法
- sigwait
- Google Guava官方教程
- 数学书推荐
- 第12周项目1-实现复数类中的运算符重载-2
- Python读取iOS安装包IPA中的信息和图片
- RMQ算法
- Struts,迈向java的大门
- 练习1-15 重新编写1.2节中的温度转换程序,使用函数实现温度转换计算
- Android OpenGL ES2.0编程教程系列之定义形状(二)
- c语言学习笔记之格式控制详细
- 剑指offer(三十六)之栈的压入、弹出序列
- 蓝牙nrf51822空中升级
- Uva 227 Puzzle
- Hello CSDN