Cod sursa(job #2013766)

Utilizator 3DwArDPauliuc Edward 3DwArD Data 22 august 2017 12:58:33
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.81 kb
#include <bits/stdc++.h>
using namespace std;
#define Nmax 100002
ifstream f("rmq.in");
ofstream g("rmq.out");
int n,q,v[Nmax],sparse[Nmax][20];
int preprocess(){
    for(int i=0;i<n;i++)sparse[i][0]=v[i];
    for(int j=1;j<=log2(n);j++){
        for(int i=0;i+(1<<(j-1))<n;i++){
            sparse[i][j]=min(sparse[i][j-1],sparse[i+(1<<(j-1))][j-1]);
        }
    }

}
/*void afisare(){
    for(int i=0;i<n;i++){
        for(int j=0;(1<<j)<=n;j++)g<<sparse[i][j]<<" ";
        g<<"\n";
    }
}*/
int main()
{
    f>>n>>q;
    for(int i=0;i<n;i++)f>>v[i];
    preprocess();
    //afisare();
    for(int i=1;i<=q;i++){
        int a,b,l,k;
        f>>a>>b;
        a--;b--;
        l=b-a+1;
        k=log2(l);
        g<<min(sparse[a][k],sparse[b+1-(1<<k)][k])<<"\n";
    }
    return 0;
}