Pagini recente » Cod sursa (job #3213759) | Cod sursa (job #1361028) | Cod sursa (job #703339) | Cod sursa (job #2838420) | Cod sursa (job #2300484)
#include <fstream>
using namespace std;
#define FILENAME "rmq"
ifstream fin(FILENAME".in");
ofstream fout(FILENAME".out");
const int MAXN = 100000 + 16;
const int MAXLOGN = 24;
int N, M;
int RMQ[MAXN][MAXLOGN];
int A[MAXN], LOG[MAXN];
int main()
{
fin >> N >> M;
for(int i = 1; i <= N; ++i)
{
fin >> A[i];
RMQ[i][0] = i;
}
LOG[1] = 0;
for(int i = 2; i <= N; ++i)
LOG[i] = LOG[i >> 1] + 1;
for(int j = 1; (1 << j) <= N; ++j)
for(int i = 1; i + (1 << j) - 1 <= N; ++i)
{
if(A[RMQ[i][j - 1]] < A[RMQ[i + (1 << (j - 1))][j - 1]])
RMQ[i][j] = RMQ[i][j - 1];
else
RMQ[i][j] = RMQ[i + (1 << (j - 1))][j - 1];
}
while(M--)
{
int x, y;
fin >> x >> y;
int len = LOG[y - x + 1];
fout << min(A[RMQ[x][len]], A[RMQ[y - (1 << len) + 1][len]]) << '\n';
}
return 0;
}