Pagini recente » Cod sursa (job #3154373) | Cod sursa (job #2210774) | Cod sursa (job #1266090) | Cod sursa (job #1887575) | Cod sursa (job #2788320)
#include <fstream>
#include <algorithm>
#define NMAX 100002
#define LMAX 18
using namespace std;
ifstream cin("rmq.in");
ofstream cout("rmq.out");
int rmq[LMAX][NMAX];
int main() {
int i, j, n, m, lgCur, cop, a, b, put2, k, mn;
cin>>n>>m;
for( i = 1; i <= n; i++ ) {
cin>>rmq[1][i];
}
cop = n;
lgCur = 1;
while( cop ) {
cop /= 2;
lgCur++;
}
for( i = 0; i <= lgCur; i++ )
rmq[0][i] = 2100000000;
for( i = 0; i <= n; i++ )
rmq[i][0] = 2100000000;
for( i = 2; i < lgCur; i++ ) {
for( j = 1; j <= n - ( 1 << ( i - 1 ) ) + 1; j++ ) {
rmq[i][j] = min( rmq[i - 1][j], rmq[i - 1][j + ( 1 << ( i - 2 ) )] );
}
}
for( i = 1; i <= m; i++ ) {
cin>>a>>b;
put2 = 1;
k = 1;
while( put2 <= b - a ) {
put2 *= 2;
k++;
}
mn = 2100000000;
while( a <= b ) {
if( put2 <= b - a + 1 ) {
if( rmq[k][a] < mn )
mn = rmq[k][a];
a += put2;
}
put2 /= 2;
k--;
}
cout<<mn<<"\n";
}
return 0;
}