Pagini recente » Cod sursa (job #1314687) | Cod sursa (job #1049275) | Cod sursa (job #813951) | Cod sursa (job #2630170) | Cod sursa (job #163430)
Cod sursa(job #163430)
#include<fstream>
#define MAXN 100000
#define LOGMAXN 32
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;i<=log[n];i++)
for(j=0;j<n;j++)
if(a[M[i-1][j]]<a[M[i-1][j-(1<<i-1)-1]]) M[i][j]=M[i-1][j];
else M[i][j]=M[i-1][j-(1<<i-1)-1];
}
int query(int i, int j){
if(a[M[log[j+1]][i]]<a[M[log[j+1]][j-log[j+1]]]) return M[log[j+1]][i];
else return M[log[j+1]][j-log[j+1]];
}
int main(){
int i, x, y;
ifstream f("rmq.in");
f>>n>>m;
for(i=0;i<n;i++)
f>>a[i];
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;
}