Pagini recente » Cod sursa (job #2781021) | Cod sursa (job #184159) | Cod sursa (job #2104316) | Cod sursa (job #2012905) | Cod sursa (job #1250978)
#include <fstream>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
const int nmax= 100000;
const int logmax= 20;
int v[nmax+1], d[nmax+1][logmax+1];
int main( ) {
int n, m;
fin>>n>>m;
for ( int i= 1; i<=n; ++i ) {
fin>>v[i];
d[i][0]= i;
}
for ( int j= 1; (1<<j)<=n; ++j ) {
for ( int i= 1; i+(1<<j)-1<=n; ++i ) {
if ( v[d[i][j-1]]<v[d[i+(1<<(j-1))][j-1]] ) {
d[i][j]= d[i][j-1];
} else {
d[i][j]= d[i+(1<<(j-1))][j-1];
}
}
}
for ( int i= 1; i<=m; ++i ) {
int x, y, k= 0;
fin>>x>>y;
for ( int p= 1; 2*p<=y-x+1; p*= 2, ++k ) ;
int sol= min(v[d[x][k]], v[d[y-(1<<k)+1][k]]);
fout<<sol<<"\n";
}
return 0;
}