Pagini recente » Cod sursa (job #2836421) | Cod sursa (job #1907759) | Cod sursa (job #2247582) | Cod sursa (job #37628) | Cod sursa (job #2369853)
#include <iostream>
#include <fstream>
#define Nmax 100005
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int n, Q;
int rmq[20][Nmax];
int log2[Nmax];
int query(int x, int y)
{
if(x > y) swap(x, y);
int i=log2[y-x+1];
return min(rmq[i][x], rmq[i][y-(1<<i)+1]);
}
int main()
{
f >> n >> Q;
for (int i = 1; i <= n; i++) f >> rmq[0][i];
for (int i = 1; (1<<i) <= n; i++)
for (int j = 1; j+(1<<i)-1 <= n; j++)
{
int x=rmq[i-1][j];
int y=rmq[i-1][j+(1<<(i-1))];
rmq[i][j]=min(x, y);
}
/*for (int i = 0; (1<<i) <= n; i++)
{
for (int j = 1; j+(1<<i) <= n; j++)
g << rmq[i][j] << " ";
g << '\n';
}*/
for (int i = 2; i <= n; i++)
log2[i]=log2[i/2]+1;
// g << '\n';
while(Q--)
{
int x, y;
f >> x >> y;
g << query(x, y) << '\n';
}
return 0;
}