Pagini recente » Cod sursa (job #700697) | Cod sursa (job #476146) | Autentificare | Cod sursa (job #2883723) | Cod sursa (job #2171354)
#include <bits/stdc++.h>
std::ifstream in("rmq.in");
std::ofstream out("rmq.out");
using namespace std;
const int MAX = 100005;
int RMQMatrix[25][MAX];
int Lg[MAX];
int N,Questions;
int M;
inline void scanDATA()
{
in >> N >> M;
for ( int i = 1; i <= N ; ++i)
in >> RMQMatrix[0][i];
for ( int i = 2; i <= N ; ++i)
Lg[i] = Lg[i/2]+1;
}
void RMQ()
{
for ( int i = 1 ; i <= Lg[N] ; ++i)
for ( int j = 1; j <= N - ( 1 << (i-1)) ; ++j)
RMQMatrix[i][j] = min(RMQMatrix[i-1][j] , RMQMatrix[i-1][j+(1<<(i-1))]);
}
void LCA(int x , int y)
{
if(x>y) swap(x,y);
int k = Lg[y-x+1];
out<< min(RMQMatrix[k][x] , RMQMatrix[k][y-(1<<k)+1]) <<"\n";
}
int main()
{
scanDATA();
RMQ();
for ( int i = 1; i <= M ; ++i)
{
int x,y;
in >> x >> y;
LCA(x,y);
}
}