Pagini recente » Cod sursa (job #2660025) | Cod sursa (job #744290) | Cod sursa (job #3222015) | Cod sursa (job #98582) | Cod sursa (job #597279)
Cod sursa(job #597279)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin ("rmq.in");
ofstream fout ("rmq.out");
int N, M, RMQ[20][100000], X[100000], Log2[100000];
inline int Min (int a, int b)
{
if (a<b)
{
return a;
}
return b;
}
void BuildRMQ ()
{
int i, j, n;
for (i=2; i<=N; ++i)
{
Log2[i]=Log2[i/2]+1;
}
for (i=1; i<=N; ++i)
{
RMQ[0][i]=X[i];
}
for (i=1; i<=Log2[N]; ++i)
{
n=N-(1<<i)+1;
for (j=1; j<=n; ++j)
{
RMQ[i][j]=Min (RMQ[i-1][j], RMQ[i-1][j+(1<<(i-1))]);
}
}
}
int Query (int A, int B)
{
int L, Dif;
L=B-A+1;
Dif=L-(1<<Log2[L]);
return Min (RMQ[Log2[L]][A], RMQ[Log2[L]][A+Dif]);
}
int main ()
{
int i, A, B;
fin >> N >> M;
for (i=1; i<=N; ++i)
{
fin >> X[i];
}
BuildRMQ ();
for (; M>0; --M)
{
fin >> A >> B;
fout << Query (A, B) << "\n";
}
fin.close ();
fout.close ();
return 0;
}