Pagini recente » Cod sursa (job #179751) | Cod sursa (job #1773208) | Cod sursa (job #1732643) | Cod sursa (job #634866) | Cod sursa (job #2480964)
#include <iostream>
#include <cstdio>
#define LOG_MAX 17
#define NMAX 100001
using namespace std;
int r[LOG_MAX][NMAX],log[NMAX];
int minim(int a, int b){
return a < b ? a : b;
}
int rmq(int x, int y){
int length = y-x+1;
int exp = log[length];
return minim(r[exp][x],r[exp][y-(1<<exp)+1]);
}
int main()
{
FILE *fin, *fout;
int n,q,x,y,i,j;
fin = fopen("rmq.in","r");
fout = fopen("rmq.out","w");
fscanf(fin,"%d %d",&n,&q);
for(j=0;j<n;j++)
fscanf(fin,"%d",&r[0][j]);
log[1] = 0;
for(i=2;i<=n;i++)
log[i] = 1+log[i/2];
for(i=1;i<=log[n];i++)
for(j=0;j+(1<<i)-1<n;j++)
r[i][j] = minim(r[i-1][j],r[i-1][j+(1<<(i-1))]);
while(q--){
fscanf(fin,"%d %d",&x,&y);
fprintf(fout,"%d\n",rmq(x-1,y-1));
}
fclose(fin);
fclose(fout);
return 0;
}