比赛 区间问题练习 评测结果 AAAAAAAAAA
题目名称 忠诚 最终得分 100
用户昵称 Fisher. 运行时间 1.368 s
代码语言 C++ 内存使用 8.33 MiB
提交时间 2017-04-21 18:56:56
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <iomanip>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
int n,t;
int f[100010][21];
inline void rmq()
{
	for(int j=1;(1<<j)<=n;j++)
	{
		for(int i=1;i<=n;i++)
		{
			if(i+(1<<(j-1))-1<=n)
			{
				f[i][j]=min(f[i][j-1],f[i+(1<<(j-1))][j-1]);
			}
		}
	}
}
inline int find_min(int l,int r)
{
	int k=0;
	while((1<<(k+1))<=r-l+1)k++;
	return min(f[l][k],f[r-(1<<k)+1][k]);
}
int main()
{
	freopen("faithful.in","r",stdin);
	freopen("faithful.out","w",stdout);
	cin>>n>>t;
	for(int i=1;i<=n;i++)
	{
		cin>>f[i][0];
	}
	rmq();
	while(t--)
	{
		int x,y;
		cin>>x>>y;
		cout<<find_min(x,y)<<" ";
	}
	cout<<endl;
	return 0;
}