Pagini recente » Cod sursa (job #2559101) | Cod sursa (job #591000) | Cod sursa (job #2838594) | Cod sursa (job #689707) | Cod sursa (job #2266875)
#include<iostream>
#include<fstream>
#include<cmath>
#define MAXN 100000
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int n,q;
int a[MAXN];
int m[MAXN][20];
int calc_log(int x)
{
return floor(log2(x));
}
int query(int x,int y)
{
int dif = y-x+1;
int k = calc_log(dif);
int p = pow(2,k);
int minn = m[x-1][k];
if(dif-p > 0) minn = min(minn,m[(x-1)+(dif-p)][k]);
return minn;
}
int main()
{
fin>>n>>q;
int l = calc_log(n);
for(int i=0;i<n;i++) fin>>a[i];
for(int i=0;i<n;i++) m[i][0] = a[i];
for(int j=1;j<=l;j++)
for(int i=0;i<n;i++)
{
int p = j-1;
int k = pow(2,p);
m[i][j] = m[i][p];
if(i+k <= MAXN) m[i][j] = min(m[i][p],m[i+k][p]);
}
for(int i=0;i<q;i++)
{
int k1,k2;
fin>>k1>>k2;
fout<<query(k1,k2)<<"\n";
}
}