Pagini recente » Ședință 2009-10-23 | Sedinta 2009-03-16 | Rating Dudau Vlad (vladdudau) | Statistici Zinnenberg Gruhten (gruhten) | Cod sursa (job #2181392)
#include <fstream>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
const int nmax= 100000;
const int p2= 16;
int v[nmax+1], d[nmax+1][p2+1];
int main( ) {
int n, m;
fin>>n>>m;
for ( int i= 1; i<=n; ++i ) {
fin>>v[i];
d[i][0]= v[i];
}
for ( int j= 1; (1<<j)<=n; ++j ) {
for ( int i= 1; i<=n-(1<<j)+1; ++i ) {
d[i][j]= min(d[i][j-1], d[i+(1<<(j-1))][j-1]);
}
}
for ( int i= 1, a, b; i<=m; ++i ) {
fin>>a>>b;
int p;
for ( p= 0; (1<<(p+1))<=a-b+1; ++p ) ;
fout<<min(d[a][p], d[b-(1<<p)+1][p])<<"\n";
}
return 0;
}