RMQ-ST模板
2015-06-01 16:54
399 查看
#include<iostream>
#include<cstdio>
#include<string.h>
#include<cstring>
#include<string>
#include<stack>
#include<set>
#include<algorithm>
#include<cmath>
#include<vector>
#include<map>
#define LOCAL
#define ll long long
#define lll unsigned long long
#define MAX 1000009
#define eps 1e-8
#define INF 0x7fffffff
#define mod 1000000007
using namespace std;
/*
题意:RMQ-ST算法
想法:模板
*/
int A[MAX];
int dp[1009][1009];
int n ;
int RMQ_init()
{
for(int i = 1; i<=n; i++) dp[i][0] = A[i];//初始化
for(int j = 1; (1<<j)<=n; j++)//2的j次方
for(int i = 1; i + j - 1<=n; i++)//从i开始,长度为2的j次方的一段元素的最小值
dp[i][j] = min(dp[i][j- 1],dp[i+(1<<(j- 1))][j - 1]);
}
int RMQ(int L,int R)
{
int k = 0;
while((1<<(k+1))<=R - L + 1)k++;//找到符合L - R的符合区间
return min(dp[L][k],dp[R - (1<<k) + 1][k]);//返回区间最小值
}
int main()
{
//freopen("date.in","r",stdin);
int m;
cin>>n;
for(int i = 1;i<=n;i++)
{
cin>>A[i];
}
RMQ_init();
cin>>m;
while(m--)
{
int x,y;
cin>>x>>y;
if(x>y) swap(x,y);
cout<<RMQ(x,y)<<endl;
}
return 0;
}
#include<cstdio>
#include<string.h>
#include<cstring>
#include<string>
#include<stack>
#include<set>
#include<algorithm>
#include<cmath>
#include<vector>
#include<map>
#define LOCAL
#define ll long long
#define lll unsigned long long
#define MAX 1000009
#define eps 1e-8
#define INF 0x7fffffff
#define mod 1000000007
using namespace std;
/*
题意:RMQ-ST算法
想法:模板
*/
int A[MAX];
int dp[1009][1009];
int n ;
int RMQ_init()
{
for(int i = 1; i<=n; i++) dp[i][0] = A[i];//初始化
for(int j = 1; (1<<j)<=n; j++)//2的j次方
for(int i = 1; i + j - 1<=n; i++)//从i开始,长度为2的j次方的一段元素的最小值
dp[i][j] = min(dp[i][j- 1],dp[i+(1<<(j- 1))][j - 1]);
}
int RMQ(int L,int R)
{
int k = 0;
while((1<<(k+1))<=R - L + 1)k++;//找到符合L - R的符合区间
return min(dp[L][k],dp[R - (1<<k) + 1][k]);//返回区间最小值
}
int main()
{
//freopen("date.in","r",stdin);
int m;
cin>>n;
for(int i = 1;i<=n;i++)
{
cin>>A[i];
}
RMQ_init();
cin>>m;
while(m--)
{
int x,y;
cin>>x>>y;
if(x>y) swap(x,y);
cout<<RMQ(x,y)<<endl;
}
return 0;
}
相关文章推荐
- Linux安装Node.js(源码编译安装)
- 网站接入银联网上支付(B2B)
- 【转】 Ubuntu下配置USB转串口及串口工具配置--不错
- Android最新支持包Design简介
- oracle获取本月第一天和最后一天及Oracle trunc()函数的用法
- 大数据概述
- log4j使用DailyRollingFileAppender
- yum安装软件提示没有可用的baseurl;
- 获取未安装apk文件信息
- 第13周多态性与虚函数程序阅读
- 第十三周 项目三--立体类族共有的抽象类
- 文章标题
- jquery select 上移下移
- java简单的接口程序
- fwrite函数
- 换WAV格式
- rabbitmq相关
- Sharepoint Workflow 获取中文栏的问题
- window.location.href/replace/reload()--页面跳转+替换+刷新
- C语言笔记(四)