Pagini recente » Statistici Deian Pop (DeianPop) | Istoria paginii utilizator/anthelixes | Profil bulan | Atasamentele paginii oni_2010_ramas | Cod sursa (job #420050)
Cod sursa(job #420050)
#include <stdio.h>
#define IN "rmq.in"
#define OUT "rmq.out"
#define Lg 20
#define MIN(a,b) a<b?a:b
using namespace std;
int rmq[Lg][1<<Lg];
int Put[1<<Lg];
int N,M,P1,P2;
void Read()
{
scanf ("%d %d",&N,&M);
for (int i=1 ; i<=N ; i++)
scanf ("%d", &rmq[0][i]);
}
void Solve()
{
for (int i=2; i<=N; i++)
Put[i] = Put[i>>1]+1;
for (int i=1; i<=Put[N]; i++)
{
P1 = (1<<i)-1;
P2 = (1<<(i-1));
for (int j=1; j<=N-P1; j++)
rmq[i][j] = MIN(rmq[i-1][j], rmq[i-1][j+P2]);
}
}
void Write()
{
int A,B,D;
for (int i=0; i<M; i++)
{
scanf ("%d %d", &A, &B);
D = Put[B-A+1];
printf("%d\n", MIN(rmq[D][A], rmq[D][B-(1<<D)+1]));
}
}
int main ()
{
freopen (IN ,"r", stdin);
freopen (OUT, "w", stdout);
Read();
Solve();
Write();
return 0;
}