Pagini recente » Cod sursa (job #559730) | Cod sursa (job #1634560) | Cod sursa (job #1668152) | Cod sursa (job #1513492) | Cod sursa (job #2787967)
#include<fstream>
using namespace std;
ifstream cin("rmq.in");
ofstream cout("rmq.out");
int rmq[100002][22],n,q;
int main()
{
cin>>n>>q;
for(int i=1;i<=n;i++)
cin>>rmq[i][0];
for(int lg=2,exp=1;lg<=n;lg*=2,exp++)
for(int i=1;i+lg-1<=n;i++)
rmq[i][exp]=min(rmq[i][exp-1],rmq[i+lg/2][exp-1]);
for(int i=1;i<=n;i++)
{
for(int j=0;j<=n;j++)
cout<<rmq[i][j]<<' ';
cout<<'\n';
}
for(int k=1;k<=q;k++)
{
int x,y;
cin>>x>>y;
if(x>y)
swap(x,y);
int lg=y-x+1;
int p=1;
int exp=0;
while(p<=lg)
{
p*=2;
exp++;
}
p/=2;
exp--;
cout<<min(rmq[x][exp],rmq[y-p+1][exp])<<'\n';
}
}