Pagini recente » Cod sursa (job #1558071) | Istoria paginii runda/pregatire_oji_cls8-9/clasament | Profil BidonTurtit | Cod sursa (job #949980) | Cod sursa (job #604498)
Cod sursa(job #604498)
#include <iostream>
#define NMax 100005
#define LgMax 20
using namespace std;
int N, Log2[NMax], RMQ[LgMax][NMax];
inline int Min (int a, int b)
{
if (a<b)
{
return a;
}
return b;
}
void BuildLog2 ()
{
for (int i=2; i<=N; ++i)
{
Log2[i]=Log2[i/2]+1;
}
}
void BuildRMQ ()
{
BuildLog2 ();
for (int l=1; l<=Log2[N]; ++l)
{
int n=N-(1<<l)+1;
for (int i=1; i<=n; ++i)
{
RMQ[l][i]=Min (RMQ[l-1][i], RMQ[l-1][i+(1<<(l-1))]);
}
}
}
int Query (int A, int B)
{
int L=B-A+1, Dif=L-(1<<Log2[L]);
return Min (RMQ[Log2[L]][A], RMQ[Log2[L]][A+Dif]);
}
int main()
{
freopen ("rmq.in", "r", stdin);
freopen ("rmq.out", "w", stdout);
int M;
scanf ("%d %d", &N, &M);
for (int i=1; i<=N; ++i)
{
scanf ("%d", &RMQ[0][i]);
}
BuildRMQ ();
for (; M>0; --M)
{
int A, B;
scanf ("%d %d", &A, &B);
printf ("%d\n", Query (A, B));
}
return 0;
}