Pagini recente » Cod sursa (job #16913) | Cod sursa (job #2615496) | Cod sursa (job #532806) | Cod sursa (job #1594379) | Cod sursa (job #1564247)
#include <fstream>
#include <math.h>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int rmq[18][100001];
int a[100001],logg[100001];
int n,m,x,y,i,l,p,j;
int query(int x,int y)
{
int p=logg[y-x+1];
int l=(1<<p);
int rez=min(rmq[p][x], rmq[p][y-l+1]);
return rez;
}
int main()
{
fin>>n>>m;
for(i=1; i<=n; i++) fin>>a[i];
//contruire
logg[1]=0;
for(i=2;i<=n;i++)
logg[i]=logg[i/2]+1;
// initializare
for(i=1; i<=n; i++)
rmq[0][i]=a[i];
for(i=1,l=2; l<=n; i++,l*=2)
for(j=1; j+l-1<=n; ++j)
rmq[i][j]=min(rmq[i-1][j], rmq[i-1][j+l/2]);
for(i=1;i<=m;i++)
{
fin>>x>>y;
fout<<query(x,y)<<'\n';
}
return 0;
}