Pagini recente » Cod sursa (job #2947994) | Cod sursa (job #2554420) | Cod sursa (job #70431) | Cod sursa (job #459716) | Cod sursa (job #2901722)
#include <fstream>
using namespace std;
ifstream in("rmq.in");
ofstream out("rmq.out");
int rmq[18][100002], n, m, lg[100002], a[100002];
int main()
{
int l, x, y, dif, shift;
in>>n>>m;
for(int i = 1; i <= n; i++)in>>a[i];
for(int i = 2; i <= n; i++)lg[i] = lg[i/2]+1;
for(int i = 1; i <= n; i++)rmq[0][i] = a[i];
for(int i=1; (1 << i) <= n; i++)
for(int j = 1; j <= n - (1 << i)+1; j++){
l = 1<<(i-1);
rmq[i][j] = min(rmq[i-1][j], rmq[i-1][j+l] );}
for(int i = 1; i <= m; i++){
in>>x>>y;
dif = y - x +1;
l = lg[dif];
shift = dif - (1<<l);
out<<min(rmq[l][x], rmq[l][x+shift])<<"\n";}
return 0;
}