Pagini recente » Cod sursa (job #3273394) | Cod sursa (job #1197135)
#include <iostream>
#include <fstream>
using namespace std;
fstream in("rmq.in",ios::in),out("rmq.out",ios::out);
const int N=1+1e5;
int lg[N],m[20][N];
#define mi(a,b) a<b?a:b
void log(int n){
for(int i=1,e=1 ; i<=n ; i++){
if((1<<e)==i) e++;
lg[i]=e;
}
}
void precalc(int n){
for(int i=1 ; i<=lg[n] ; i++){
for(int j=i ; j<=n ; j++){
m[i][j]=mi(m[i-1][j],m[i-1][j-(1<<(i-1))]);
}
}
}
int rmq(int a, int b){
int l=lg[b-a+1];
return mi(m[l][a+(1<<l)-1],m[l][b]);
}
int main()
{
int n,q,a,b;
in>>n>>q;
log(n);
for(int i=1 ; i<=n ; i++){
in>>m[0][i];
}
precalc(n);
for(int i=0 ; i<=lg[n] ; i++){
for(int j=1 ; j<=n ; j++){
cout<<m[i][j]<<' ';
}cout<<'\n';
}
while(q--){
in>>a>>b;
out<<rmq(a,b)<<'\n';
}
return 0;
}