Cod sursa(job #1053498)

Utilizator alexsuciuAlex Suciu alexsuciu Data 12 decembrie 2013 19:56:26
Problema Range minimum query Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 0.66 kb
#include<iostream>
#include<fstream>
#include<cmath>
#include<algorithm>
using namespace std;
long m[100001][101];
long a[1000001];
long i,k,mi,n,j,x,y;

int main()
{
    ifstream f("rmq.in");
    ofstream g("rmq.out");
    f>>n>>mi;
    for(i=1;i<=n;i++)
        f>>a[i];
    for(i=1;i<=n;i++)
        m[i][0]=i;
    for(j=1;(1<<j)<=n;j++)
        for(i=1;i+(1<<(j-1))-1<=n;i++)
        if(a[m[i][j-1]]<=a[m[i+(1<<(j-1))][j-1]])
            m[i][j]=m[i][j-1];
        else m[i][j]=m[i+(1<<(j-1))][j-1];
    for(i=1;i<=mi;i++)
    {
        f>>x>>y;
        k=log2(y-x+1);
        g<<min(a[m[x][k]],a[m[y-(1<<k)+1][k]])<<'\n';
    }



}