Pagini recente » Cod sursa (job #751589) | Cod sursa (job #1948469) | Cod sursa (job #2481040) | Cod sursa (job #1278769) | Cod sursa (job #1680226)
#include<fstream>
using namespace std;
ifstream in("rmq.in");
ofstream out("rmq.out");
const int NMAX = 100005;
int RMQ[20][NMAX],N,M,lg[NMAX];
int main()
{
lg[1] = 0;
for(int i = 2 ; i < 100000 ; ++i)
lg[i] = 1 + lg[i/2];
in>>N>>M;
for(int i = 1 ; i <= N ; ++i)
in>>RMQ[0][i];
for(int i = 1 ; i <= lg[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 x,y;
for(int i = 1 ; i <= M ; ++i){
in>>x>>y;
int log = lg[y - x + 1];
int diff = y - x + 1 - (1 << log);
out<<min(RMQ[log][x],RMQ[log][x + diff])<<"\n";
}
in.close();
out.close();
return 0;
}