Pagini recente » Cod sursa (job #2244131) | Cod sursa (job #2613767) | Cod sursa (job #3200024) | Cod sursa (job #1276826) | Cod sursa (job #2276830)
#include <fstream>
using namespace std;
ifstream f ("rmq.in");
ofstream g ("rmq.out");
int const NM = 1e5;
int v [1 + NM] , rmq [1 + 17][1 + NM] , log [1 + NM];
inline void preclog (int number){
log [1] = 0;
for(int i = 2 ; i <= number ; ++ i)
log [i] = 1 + log [i / 2];
return;
}
inline void rq (int n){
for(int i = 0 ; i <= log [n] ; ++ i){
for(int j = 1 ; j <= n ; ++ j)
if (! i)
rmq [i][j] = v [j];
else
if (j - (1 << (i - 1)) > 0)
rmq [i][j] = min (rmq [i - 1][j - (1 << (i - 1))] , rmq [i - 1][j]);
}
return;
}
int main()
{
int n , m;
f >> n >> m;
for(int i = 1 ; i <= n ; ++ i)
f >> v [i];
preclog (n);
rq (n);
for(int i = 1 ; i <= m ; ++ i){
int a , b , l;
f >> a >> b;
l = log [1 + b - a];
if (a == b)
g << v [a];
else
g << min (rmq [l][a + (1 << l) - 1] , rmq [l][b]);
g << '\n';
}
return 0;
}