Cod sursa(job #676662)

Utilizator costyv87Vlad Costin costyv87 Data 9 februarie 2012 14:45:17
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.73 kb
#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();

}