Cod sursa(job #780764)

Utilizator my666013Test Here my666013 Data 21 august 2012 12:08:49
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.67 kb
#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;

int n,r[100001][19];

void rmq(){
    for(int j=1;(1<<j)<=n;j++)
    for(int i=1;i+(1<<(j-1))<=n;i++)
        r[i][j] = min(r[i][j-1],r[i+(1<<(j-1))][j-1]);

}

int main(){
    int m,x,y,k;
    freopen("rmq.in","r",stdin);
    freopen("rmq.out","w",stdout);

    scanf("%d %d",&n,&m);
    for(int i=1;i<=n;i++)scanf("%d ",&r[i][0]);

    rmq();

    //for(int i=1;i<=20;i++){
    //for(int j=0;j<=10;j++)printf("%d ",r[i][j]); printf("\n"); }

    while(m--)
    {
        scanf("%d %d",&x,&y);
        k = log(y-x+1)/log(2);
        printf("%d\n",min( r[x][k], r[y-(1<<k)+1][k] ));
    }

    return 0;
}