Pagini recente » Cod sursa (job #547815) | Cod sursa (job #2404271) | Cod sursa (job #1046032) | Cod sursa (job #1190480) | Cod sursa (job #2767398)
#include<iostream>
#include<algorithm>
#include<fstream>
#define NMAX 100000+5
#define MMAX NMAX*10+5
#define LMAX 17
using namespace std;
int n, m;
int numere[NMAX];
int rmq[NMAX][LMAX];
int lg[NMAX];
ifstream f("rmq.in");
ofstream g("rmq.out");
int main()
{
f >> n>>m;
for (int i = 0; i < n; i++)
{
f >> numere[i];
rmq[i][0] = numere[i];
}
lg[1] = 0;
for (int i = 2; i <= n; i++)
lg[i] = lg[i / 2]+1;
for (int j = 1; (1 << j) <= n; j++)
for (int i = 0; i + (1 << j) - 1 <= n; i++)
{
rmq[i][j] = min(rmq[i][j - 1], rmq[i + (1 << (j - 1))][j - 1]);
}
for (int i = 1; i <= m; i++)
{
int L, R;
f >> L >> R;
L--, R--;
int length = R - L + 1;
int k = lg[length];
g << min(rmq[L][k], rmq[R - (1 << k) + 1][k]) << endl;
}
}