Pagini recente » Cod sursa (job #3201675) | Cod sursa (job #3141925) | Cod sursa (job #2493235) | Cod sursa (job #3128927) | Cod sursa (job #2494466)
#include <fstream>
using namespace std;
ifstream in ("rmq.in");
ofstream out ("rmq.out");
const int nmax=100007;
int v[nmax],rmq[nmax][20];
int query(int a,int b)
{
int pas;
for(pas=0;(1<<pas)<=b-a+1;pas++);
pas--;
if(v[rmq[a][pas]]<=v[rmq[b-(1<<pas)+1][pas]])
return rmq[a][pas];
else return rmq[b-(1<<pas)+1][pas];
}
int main()
{
int n,m;
in>>n>>m;
int i;
for(i=1;i<=n;i++)
{
in>>v[i];
rmq[i][0]=i;
}
int j;
for(j=1;(1<<j)<=n;j++)
{
for(i=1;i+(1<<j)-1<=n;i++)
{
if(v[rmq[i][j-1]]<v[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 a,b;
for(i=1;i<=m;i++)
{
in>>a>>b;
out<<v[query(a,b)]<<'\n';
}
return 0;
}