Pagini recente » Cod sursa (job #117757) | Cod sursa (job #1858732) | Cod sursa (job #1459900) | Cod sursa (job #1123372) | Cod sursa (job #1685634)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in ("rmq.in");
ofstream out ("rmq.out");
const int N_max=100005;
const int L=17; //log2(N)=16,6..
int r[N_max][L+1], log[N_max],n,m,v[N_max],x,y,rez,lg;
int minim(int a,int b)
{
if(a<b)
return a;
else
return b;
}
int main()
{
in>>n>>m;
for(int i=1; i<=n; i++)
in>>v[i];
for(int i=1; i<=n; i++)
{
r[i][0]=v[i];
for(int j=1; (1<<j)<=i; j++)
r[i][j]=minim( r[i][j-1], r[i-(1<<(j-1))][j-1] );//
}
log[1]=0;
for(int i=2; i<=n; i++)
log[i]=1+log[i/2];
for(int i=1; i<=m; i++)
{
in>>x>>y;
lg=log[y-x+1];
rez=minim( r[y][lg], r[ x+(1<<lg)-1 ][lg] );
out<<rez<<'\n';
}
return 0;
}