Pagini recente » Cod sursa (job #590558) | Cod sursa (job #555288) | Cod sursa (job #687784) | Cod sursa (job #1383423) | Cod sursa (job #3199109)
#include <iostream>
#include <fstream>
using namespace std;
int rmq[100005][20],v[100005],sz[100005];
int main()
{
ifstream cin("rmq.in");
ofstream cout("rmq.out");
int n,put=1,cnt=0,q,a,b;
cin>>n>>q;
for(int i=1;i<=n;i++)
{
cin>>v[i];
if(put<=i)put*=2,cnt++;
sz[i]=cnt-1;
rmq[i][0]=v[i];
}
sz[0]=1;
/*for(int i=0;i<=n;i++)
cout<<i<<" "<<sz[i]<<'\n';*/
put=1;
for(int p=1;p<=sz[n];p++)
{
put*=2;
for(int i=1;i<=n;i++)
{
rmq[i][p]=min(rmq[i][p-1],rmq[min(i+put/2,n)][p-1]);
//cout<<i<<" "<<p<<" "<<rmq[i][p]<<'\n';
}
}
for(int i=0;i<q;i++)
{
cin>>a>>b;
put=sz[b-a+1];
cout<<min(rmq[a][put],rmq[b-(1<<put)+1][put])<<'\n';
}
return 0;
}