Pagini recente » Cod sursa (job #1228047) | Cod sursa (job #17843) | Cod sursa (job #2684592) | Cod sursa (job #1049445) | Cod sursa (job #1070745)
#include <fstream>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int n, m, x, y, lg[100000], a[100000],rmq[100000][20];
int main()
{
fin>>n>>m;
for(int i = 0; i< n; i++)
fin>>a[i];
//computing the logarithms
for(int i = 2; i<= n; i++ )
lg[i]=1+lg[i>>1];
//preprocessing the rmq
for(int i = 0; i< n; i++ )
rmq[i][0]=i;
for(int j = 1; (1<<j)<=n; j++)
for(int i = 0; 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];
//queries
for(int i = 1; i<= m; i++)
{
fin>>x>>y;
if(x>y) swap(x,y);
int l=lg[y-x+1];
if(a[rmq[x-1][l]]<a[rmq[y-(1<<l)][l]])
fout<<a[rmq[x-1][l]]<<'\n';
else fout<<a[rmq[y-(1<<l)][l]]<<'\n';
}
fin.close();
fout.close();
return 0;
}