Pagini recente » Cod sursa (job #618877) | Cod sursa (job #1589936) | Cod sursa (job #1128238) | Cod sursa (job #3221105) | Cod sursa (job #455399)
Cod sursa(job #455399)
#include <iostream>
#include <algorithm>
#include <fstream>
#include <string>
using namespace std;
#define FILE_IN "rmq.in"
#define FILE_OUT "rmq.out"
int N, M;
int V[24][100000];
static int min(int a, int b)
{
return (a<b) ? a : b;
}
void preprmq()
{
for (int k=1; k<24; k++)
{
int l = 1<<k;
int lp2 = 1<<(k-1);
for (int i=0; i<=N-l; i++)
{
V[k][i] = min(V[k-1][i], V[k-1][i+lp2]);
}
}
}
int rmq(int a, int b)
{
a--;
b -= a;
int s = 31-__builtin_clz(b);
return min(V[s][a], V[s][a+b-(1<<s)]);
}
int main()
{
ifstream fisIn(FILE_IN);
ofstream fisOut(FILE_OUT);
fisIn >> N >> M;
for (int i=0; i<N; i++) fisIn >> V[0][i];
preprmq();
for (int i=0; i<M; i++)
{
int a,b;
fisIn >> a >> b;
fisOut << rmq(a,b) << '\n';
}
}