Pagini recente » Cod sursa (job #114460) | Cod sursa (job #1508650) | Cod sursa (job #2850718) | Cod sursa (job #1980145) | Cod sursa (job #1377390)
#include <fstream>
using namespace std;
ifstream is("rmq.in");
ofstream os("rmq.out");
int N, Q, LG[100001], PW[17], LEN, x, y;
int D[17][100001];
void Input()
{
is >> N >> Q;
LG[2] = 1;
for ( int i = 3; i <= 100001; ++i )
LG[i] = LG[(i>>1)] + 1;
PW[0] = 1;
for ( int i = 1; i <= 16; ++i )
PW[i] = (PW[i-1] << 1);
for ( int i = 1; i <= N; ++i )
is >> D[0][i];
}
void Build()
{
for ( int i = 1; i <= LG[N]; ++i )
for ( int j = 1; j <= N; ++j )
D[i][j] = min(D[i-1][j],D[i-1][j + PW[i-1]]);
}
void Query()
{
is >> x >> y;
LEN = y - x + 1;
int F = LG[LEN];
os << min(D[F][x], D[F][y - PW[F] + 1]) << '\n';
}
int main()
{
Input();
Build();
for ( int i = 1; i <= Q; ++i )
Query();
is.close();
os.close();
}