[poj3264]rmq算法学习(ST表)
2024-08-23 02:03:55
解题关键:rmq模板题,可以用st表,亦可用线段树等数据结构
log10和log2都可,这里用到了对数的换底公式
类似于区间dp,用到了倍增的思想
$F[i][j] = \min (F[i][j - 1],F[i + 1 < < (j - 1)][j - 1])$
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cstdlib>
#include<cmath>
#include<iostream>
using namespace std;
typedef long long ll;
int a[];
int lg;
int min1[][],max1[][],n,q;
void rmq(int n){
for(int j=;j<=lg;j++){
for(int i=;i+(<<j)-<=n;i++){
max1[i][j]=max(max1[i][j-],max1[i+(<<(j-))][j-]);
min1[i][j]=min(min1[i][j-],min1[i+(<<(j-))][j-]);
}
}
}
int main(){
int n,q;
ios::sync_with_stdio();
cin.tie();
cout.tie();
cin>>n>>q;
lg=int(log10(n)/log10());
for(int i=;i<=n;i++) cin>>a[i],min1[i][]=max1[i][]=a[i];
rmq(n);
while(q--){
int a,b;
cin>>a>>b;
if(a>b) swap(a,b);
int k=(int)(log10(b-a+)/log10(2.0));
int maxres=max(max1[a][k],max1[b-(<<k)+][k]);
int minres=min(min1[a][k],min1[b-(<<k)+][k]);
cout<<maxres-minres<<"\n";
}
}
最新文章
- Bootstrap3插件系列:bootstrap-select2
- B树、B-树、B+树、B*树
- jQuery选择器(一)
- android studio 应用小知识总结
- Oracle的DDL、DML、DCL
- CSAPP Lab2: Binary Bomb
- Spring IOC配置与应用
- cookie 和 session
- 两行 CSS 代码实现 PNG 任意颜色赋色技术
- 图文并茂的生产者消费者应用实例demo
- org.springframework.web.servlet.PageNotFound
- TIDB 备忘
- mongodb cxx driver学习
- C和C指针小记(十八)-使用结构和指针-双向链表
- 安卓自动化测试,贺晓聪之uiautomator设备和选择器~Python详解
- 通俗理解 CPU &;&; GPU
- Windows2003系统如何设置能让两个人共用一个桌面同时远程控制?
- ArcEngine9.3迁移至ArcObject10.1
- 会了这十种Python优雅的写法,让你工作效率翻十倍,一人顶十人用!
- 安装配置openstack-dashboard(horizon)