Pagini recente » Borderou de evaluare (job #1869968) | Cod sursa (job #2431802) | Borderou de evaluare (job #2016144) | Cod sursa (job #2628895) | Cod sursa (job #676662)
Cod sursa(job #676662)
#include <cstdio>
#include <math.h>
#include <algorithm>
#include <utility>
using namespace std;
#define nm 100010
FILE *f,*g;
int v[nm];
int a[nm][40];
int n,m;
void pre() {
int i,j;
f=fopen("rmq.in","r");
g=fopen("rmq.out","w");
fscanf(f,"%d%d",&n,&m);
for (i=1;i<=n;i++) {
fscanf(f,"%d",&v[i]);
}
for (i=1;i<=n;i++)
a[i][0]=v[i];
for (j=1;1<<j<=n;j++)
for (i=1;i+(1<<j)-1<=n;i++)
a[i][j]=min(a[i][j-1],a[i+(1<<(j-1))][j-1]);
}
void solve() {
int i,x,y,ax;
double d;
for (i=1;i<=m;i++) {
fscanf(f,"%d%d",&x,&y);
ax=(y-x+1);
d=(double) log(ax)/log (2);
ax=d;
fprintf(g,"%d\n",min(a[x][ax],a[y-(1<<ax)+1][ax]));
}
}
int main() {
pre();
solve();
}