Pagini recente » Cod sursa (job #623046) | Cod sursa (job #1198425) | Cod sursa (job #985045) | Cod sursa (job #2049675) | Cod sursa (job #3247131)
#include <fstream>
using namespace std;
int vpow2[100005];
int mat[20][100005],n;
void construct()
{
for(int p=1;p<=vpow2[n];p++)
{
for(int i=1;i<=n-(1<<p)+1;i++)
{
mat[p][i]=min(mat[p-1][i],mat[p-1][i+(1<<(p-1))]);
}
}
}
int solve(int x,int y)
{
int k=y-x+1;
return(min(mat[vpow2[k]][x],mat[vpow2[k]][y-(1<<(vpow2[k]))+1]));
}
int main()
{
ifstream cin("rmq.in");
ofstream cout("rmq.out");
for(int i=2;i<=100000;i++)
vpow2[i]=vpow2[i/2]+1;
int q,x,y;
cin>>n>>q;
for(int i=1;i<=n;i++)
cin>>mat[0][i];
construct();
for(int i=0;i<q;i++)
{
cin>>x>>y;
cout<<solve(x,y)<<'\n';
}
return 0;
}