Pagini recente » Cod sursa (job #1884505) | Cod sursa (job #127702) | Cod sursa (job #3293242) | Cod sursa (job #874097) | Cod sursa (job #841941)
Cod sursa(job #841941)
#include <stdio.h>
#include <stdlib.h>
#define MAXN 100001
#define MAXLOGN 18
int N,M,logN;
int Mat[MAXLOGN][MAXN];
int v[MAXN];
int lg[MAXN];
// min de indecsi
int min(int x,int y)
{
if( v[x] < v[y] )
return x;
else
return y;
}
int main(int argc, char* argv[])
{
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
scanf("%d %d",&N,&M);
int i,j;
lg[0] = -1;
for(i=1;i<=N;i++){
scanf("%d",&v[i]);
Mat[0][i] = i;
lg[i] = lg[i/2]+1;
}
logN = lg[N];
int d=1;
for(j=1;j<=logN;j++){
int pct = N-d;
for(i=1;i<=pct;i++){
Mat[j][i] = min( Mat[j-1][i], Mat[j-1][i+d] );
}
for(;i<=N;i++){
Mat[j][i] = Mat[j-1][i];
}
d = d << 1;
}
int a,b;
for(i=1;i<=M;i++){
scanf("%d %d",&a,&b);
printf("%d\n",v[min( Mat[lg[b-a+1]][a], Mat[lg[b-a+1]][b+1-(1<<lg[b-a+1])])]);
}
return 0;
}