Pagini recente » Cod sursa (job #121183) | Cod sursa (job #2751248) | Cod sursa (job #1710394) | Cod sursa (job #362000) | Cod sursa (job #2635949)
#include <fstream>
using namespace std;
ifstream cin("rmq.in");
ofstream cout("rmq.out");
int query();
int q, n , v[100001], rmq[100001][20];
int main() {
cin >> n >> q;
for(int i = 1 ;i <=n ;i ++)
cin >> v[i];
for(int i = 1 ;i <=n ;i ++)
rmq[i][0] = v[i];
int log = 0;
while( (1<< (log +1)) <=n)
log ++;
for(int j =1 ;j <= log ;j ++)
for(int i = 1; i <= n - (1 << j) + 1; i ++)
{
rmq[i][j] = min(rmq[i][j - 1] , rmq[i + (1 << (j -1))][j - 1]);
}
while(q--)
{
cout << query()<< '\n';
}
return 0;
}
int query()
{
int x, y;
cin >> x >> y;
if(x > y) swap(x, y);
int log = 0, length = y -x + 1;
while((1 << (log + 1)) <= length)
log ++;
return min(rmq[x][log], rmq[y - (1 << log) + 1][log]);
}