Pagini recente » Cod sursa (job #347050) | Cod sursa (job #1380181) | Cod sursa (job #1702390) | Cod sursa (job #16757) | Cod sursa (job #1163383)
#include <fstream>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int rmq[100001][20], a[100001], n, m, x, y, lg[100001];
int main()
{
fin>>n>>m;
for(int i = 1; i<= n; i++ )
fin>>a[i];
for(int i =2; i<= n; i++ )
lg[i]=1+lg[i>>1];
for(int i = 1; i<= n; i++ )
rmq[i][0]=i;
for(int j = 1; (1<<j)<= n; j++ )
for(int i = 1; i+(1<<j)-1<=n; i++ )
{
if(a[rmq[i][j-1]]<a[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];
}
for(int i = 1; i<= m; i++ )
{
fin>>x>>y;
if(x>y) swap(x,y);
int l=lg[y-x+1];
fout<<min(a[rmq[x][l]],a[rmq[y-(1<<l)+1][l]])<<'\n';
}
fin.close();
fout.close();
return 0;
}