title

ST表

这里用到了倍增的思想

#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
int n,m;
int dp[100001][20];
int read(){
    int f=1,x=0;char s=getchar();
    while(s<'0'||s>'9'){if(s=='-')f=-1;s=getchar();}
    while(s>='0'&&s<='9'){x=x*10+s-'0';s=getchar();}
    return x*f;
}
void rmq_st(int n){
	for(int i=1;i<=n;i++)
		dp[i][0]=read();
	int len=log2(n);
	for(int j=1;j<=len;j++)
		for(int i=1;i+(1<<j)-1<=n;i++)
			dp[i][j]=min(dp[i][j-1],dp[i+(1<<j-1)][j-1]);
}
int rmq_min(int l,int r){
	int k=log2(r-l+1);
	return min(dp[l][k],dp[r-(1<<k)+1][k]);
}
int main(){
	n=read();m=read();
	rmq_st(n);
	for(int i=1,l,r;i<=m;i++){
		l=read();r=read();
		printf("%d\n",rmq_min(l,r));
	}
	return 0;
}
posted @ 2018-09-10 01:38  Horrigue_JyowYang  阅读(107)  评论(0编辑  收藏  举报