Pagini recente » Cod sursa (job #249734) | Cod sursa (job #2248386) | Cod sursa (job #2697111) | Cod sursa (job #2949256) | Cod sursa (job #690098)
Cod sursa(job #690098)
#include<stdio.h>
#define maxn 100005
#define maxlog 18
FILE*f=fopen("rmq.in","r");
FILE*g=fopen("rmq.out","w");
int n,q;
int E[maxn],Rmq[maxlog][maxn];
inline int min ( int a , int b ){
return a <= b ? a : b;
}
inline void build_rmq () {
for ( int i = 2 ; i <= n ; ++i ){
E[i] = E[i>>1] + 1;
}
for ( int p = 1 ; p <= E[n] ; ++p ){
for ( int i = 1 ; i + (1<<p) - 1 <= n ; ++i ){
Rmq[p][i] = min(Rmq[p-1][i],Rmq[p-1][i+(1<<(p-1))]);
}
}
}
inline int get_min ( int x , int y ) {
int e = E[y-x+1];
int rez = min(Rmq[e][x],Rmq[e][y-(1<<e)+1]);
return rez;
}
int main () {
fscanf(f,"%d %d",&n,&q);
for ( int i = 1 ; i <= n ; ++i ){
int x;
fscanf(f,"%d",&x);
Rmq[0][i] = x;
}
build_rmq();
for ( int i = 1 ; i <= q ; ++i ){
int x,y;
fscanf(f,"%d %d",&x,&y);
fprintf(g,"%d\n",get_min(x,y));
}
fclose(f);
fclose(g);
return 0;
}