Pagini recente » Cod sursa (job #755299) | Cod sursa (job #776713) | Cod sursa (job #1624538) | Cod sursa (job #2948524) | Cod sursa (job #3226072)
#include <bits/stdc++.h>
using namespace std;
const int NMAX=100000;
const int LOG=20;
int rmq[NMAX+5][LOG];
void initrmq(vector<int>v,int n)
{
for(int i=0;i<n;i++)
{
rmq[i][0]=v[i];
}
for(int j=1;(1<<j)<=n;j++)
{
for(int i=0;(i+(1<<j)-1)<n;i++)
{
if(rmq[i][j-1]<rmq[i+(1<<j-1)][j-1])
{
rmq[i][j]=rmq[i][j-1];
}
else
{
rmq[i][j]=rmq[i+(1<<j-1)][j-1];
}
}
}
}
int queryrmq(int l,int r)
{
int len=r-l+1;
int j=(int)log(len);
if(rmq[l][j]<rmq[r-(1<<j)+1][j])
{
return rmq[l][j];
}
else
{
return rmq[r-(1<<j)+1][j];
}
}
int main()
{
ifstream cin("rmq.in");
ofstream cout("rmq.out");
int n,m;
cin>>n>>m;
vector<int>v(n);
for(int i=0;i<n;i++)
{
cin>>v[i];
}
initrmq(v,n);
while(m--)
{
int l,r;
cin>>l>>r;
cout<<queryrmq(l-1,r-1)<<'\n';
}
return 0;
}