Cod sursa(job #2647039)

Utilizator RazvanLazar2004Lazar Razvan Gabriel RazvanLazar2004 Data 2 septembrie 2020 19:17:15
Problema Range minimum query Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.8 kb
#include<fstream>
#include<math.h>
using namespace std;
int minim(long long int v[] , long long int a , long long int b){
    long long int m=v[a];
    for(long long int i=a;i<=b;i++){
        if(m>v[i]){
            m=v[i];
        }
    }
    return m;
}
int main(){
    ifstream fin("rmq.in");
    ofstream fout("rmq.out");
    long long int n,t,a,b;
    fin>>n>>t;
    long long int v[n],d[int(log2(n))][n]={};
    for(long long int i=1;i<=n;i++){
        fin>>v[i];
    }
    for(long long int i=0;i<=log2(n);i++){
        for(long long int j=1;j<=n-pow(2,i)+1;j++){
            d[i][j]=minim(v,j,j+pow(2,i)-1);
        }
    }
    for(long long int i=1;i<=t;i++){
        fin>>a>>b;
        long long int c=log2(b-a),k=b-pow(2,c)+1;
        fout<<min(d[c][a],d[c][k])<<"\n";
    }

}