Cod sursa(job #1222258)

Utilizator Adrian1997Radulescu Adrian Adrian1997 Data 22 august 2014 18:06:04
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.7 kb
#include <fstream>
#define DIM 100011
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int n,m;
int a[21][DIM],p[DIM],v[DIM];

int main(void){
    register int x,y,i,j,iv;


    f>>n>>m;
    p[1]=0;
    f>>v[1];
    a[0][1]=v[1];
    for(i=2;i<=n;i++)
        f>>v[i],p[i]=1+p[i/2],a[0][i]=v[i];

    for(j=1;(1<<j)<=n;j++){
        for(i=1;i<=n;i++){
            a[j][i]=a[j-1][i];
            iv=(1<<(j-1))+i;
            if(iv<=n && a[j-1][iv]<=a[j][i])    a[j][i]=a[j-1][iv];
        }
    }

    for(;m>0;m--){
        f>>x>>y;
        j=p[y-x+1],iv=y-(1<<j)+1;
        g<<min(a[j][x],a[j][iv])<<"\n";
    }
    f.close();
    g.close();
    return 0;
}