Pagini recente » Cod sursa (job #1925666) | Cod sursa (job #1411394) | Cod sursa (job #185009) | Cod sursa (job #1651783) | Cod sursa (job #2320926)
#include <stdio.h>
#include <iostream>
using namespace std;
FILE *in,*out;
int n,m;
int log2[100002],d[20][100002];
void read(){
fscanf(in,"%d %d",&n,&m);
for(int i=1;i<=n;i++)
fscanf(in,"%d",&d[0][i]);
}
void form_log2(){
log2[1]=0;
for(int i=2;i<=n;i++)
log2[i]=log2[i/2]+1;
}
void solve(){
for(int i=1;i<=log2[n];i++){
for(int j=1;j<=n-(1<<(i-1));j++)
d[i][j]=min(d[i-1][j],d[i-1][j+(1<<(i-1))]);
}
int x,y,k;
for(int i=1;i<=m;i++){
fscanf(in,"%d %d",&x,&y);
k=log2[y-x+1]; //2^k <= y-x
fprintf(out,"%d\n",min(d[k][x],d[k][y-(1<<k)+1]));
}
}
int main()
{
in=fopen("rmq.in","r");
out=fopen("rmq.out","w");
read();
form_log2();
solve();
return 0;
}