Pagini recente » Cod sursa (job #308418) | Cod sursa (job #573228) | Cod sursa (job #2122984) | Cod sursa (job #607738) | Cod sursa (job #2220926)
#include <fstream>
#define Nmax 100005
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int n, Q;
int rmq[18][Nmax], log2[Nmax];
int x, y;
int query(int x, int y)
{
int diff = y - x + 1;
int i = log2[diff];
int a = rmq[i][x];
int b = rmq[i][y-(1<<i)+1];
return min(a, b);
}
int main()
{
f >> n >> Q;
for ( int i = 1; i <= n; i ++ )
f >> rmq[0][i];
for ( int i = 2; i <= n; i ++ )
log2[i]=log2[i/2]+1;
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);
}
while(Q--)
{
f >> x >> y;
g << query(x, y) << '\n';
}
}