Pagini recente » Cod sursa (job #587714) | Cod sursa (job #118736) | Cod sursa (job #1180852) | Cod sursa (job #505879) | Cod sursa (job #164567)
Cod sursa(job #164567)
#include<fstream>
#define MAXN 100000
#define LOGMAXN 17
using namespace std;
int M[LOGMAXN][MAXN], a[MAXN];
int log[MAXN+1], n, m;
void create(){
int i;
log[0]=-1;
log[1]=0;
for(i=2;i<=n;i++)
log[i]=log[(i>>1)]+1;
}
void build(){
int i,j;
for(i=0;i<n;i++)
M[0][i]=i;
for(i=1;(1<<i)<n;i++)
for(j=0;j<n-(1<<i)+1;j++)
if(a[M[i-1][j]]<a[M[i-1][j+(1<<(i-1))]]) M[i][j]=M[i-1][j];
else M[i][j]=M[i-1][j+(1<<(i-1))];
}
int query(int i, int j){
if(a[M[log[j-i+1]][i]]<a[M[log[j-i+1]][j-(1<<log[j-i+1])+1]]) return M[log[j-i+1]][i];
else return M[log[j-i+1]][j-(1<<log[j-i+1])+1];
}
int main(){
int i, x, y;
ifstream f("rmq.in");
f>>n>>m;
for(i=0;i<n;i++)
f>>a[i];
create();
build();
ofstream g("rmq.out");
for(i=0;i<m;i++){
f>>x>>y;
x--;y--;
g<<a[query(x,y)]<<'\n';
}
f.close();
g.close();
return 0;
}