Pagini recente » Cod sursa (job #1166112) | Cod sursa (job #1009684) | Cod sursa (job #1201358) | Cod sursa (job #205620) | Cod sursa (job #1164635)
#include <fstream>
#define NMAX 100005
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int n, m;
int p2max[NMAX];
int rmq[25][NMAX];
void citire()
{
fin >> n >> m;
for (int i = 1; i <= n; ++i)
fin >> rmq[0][i];
}
void make_rmq()
{
for (int i = 1; (1<<i) <= n; ++i)
for (int j = 1; j <= n - (1<<i) +1; ++j)
rmq[i][j] = min(rmq[i-1][j], rmq[i-1][j+ (1<<(i-1))]);
}
int query (int x, int y)
{
if (x > y) swap(x, y);
int dif = y - x + 1;
int p2 = p2max[dif];
int sh = dif - (1<<p2);
return min(rmq[p2][x], rmq[p2][x+sh]);
}
void solve()
{
int x, y;
for (int i = 2; i <= n; ++i) p2max[i] = p2max[i>>1] +1;
while (m--)
{
fin >> x >> y;
fout << query(x,y)<<'\n';
}
}
int main()
{
citire();
make_rmq();
solve();
return 0;
}