Pagini recente » Cod sursa (job #2919999) | Cod sursa (job #705013) | Cod sursa (job #1547017) | Cod sursa (job #3225776) | Cod sursa (job #3280523)
#include <fstream>
using namespace std;
ifstream cin( "rmq.in" );
ofstream cout( "rmq.out" );
int rmq[17][100005], v[100005], logi[100005];
int main() {
for ( int i = 2; i < 100005; i++ ) {
logi[i] = logi[i / 2] + 1;
}
int n;
int m;
cin >> n;
cin >> m;
for ( int i = 1; i <= n; i++ ) {
cin >> v[i];
}
for ( int i = 1; i <= n; i++ ) {
rmq[0][i] = v[i];
}
for ( int lgcurr = 1; lgcurr <= logi[n]; lgcurr++ ) {
for ( int i = 1; i + (1 << lgcurr) - 1 <= n; i++ ) {
rmq[lgcurr][i] = min( rmq[lgcurr - 1][i], rmq[lgcurr - 1][i + ( 1 << ( lgcurr - 1 ) )] );
}
}
for ( int i = 1; i <= m; i++ ) {
int start, finish;
cin >> start >> finish;
int lg = logi[finish - start + 1];
cout << min ( rmq[lg][start], rmq[lg][finish - ( 1 << lg ) + 1] ) << '\n';
}
return 0;
}