Pagini recente » Cod sursa (job #1742656) | Cod sursa (job #2253728) | Cod sursa (job #2314352) | Cod sursa (job #956616) | Cod sursa (job #1916992)
#include <fstream>
using namespace std;
ifstream cin ("rmq.in");
ofstream cout ("rmq.out");
int best[25][100010],m,k;
int n;
void read ()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
cin>>best[0][i];
int r=1;
while(r<=n) r*=2,k++; k--;
}
void rmq ()
{
for(int i=0;i<k;i++)
{ int y=1<<i;
for(int j=1;j<=n-y;j++)
best[i+1][j]=min(best[i][j],best[i][j+y]);
}
}
void answare ()
{ int a,b;
for(int i=1;i<=m;i++)
{
cin>>a>>b;
if(a==b) cout<<best[0][a]<<"\n";
else {
int dif=b-a;
int r=1,l=0;
while(r<=dif) r*=2,l++; --l; r/=2;
cout<<min(best[l][a],best[l][b-r+1])<<"\n"; }
}
}
int main()
{
read();
rmq();
answare();
cin.close();
cout.close();
return 0;
}