记录编号 398287 评测结果 AAAAAAAAAA
题目名称 忠诚 最终得分 100
用户昵称 Gravatar玉带林中挂 是否通过 通过
代码语言 C++ 运行时间 0.985 s
提交时间 2017-04-21 21:23:45 内存使用 8.33 MiB
显示代码纯文本
#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;
}