Cod sursa(job #3131108)

Utilizator infomatic2Liviu Firca infomatic2 Data 19 mai 2023 10:47:58
Problema Range minimum query Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.88 kb
#include<fstream>
#include<vector>
#include<iostream>
#include<algorithm>
using namespace std;

ifstream in("rmq.in");
ofstream out("rmq.out");


void preprocesare(vector<vector<int>>& dp  ,int n,int j){
int putere=1<<(j);
if(putere<n){
    for(int i=0;i<n;i++){
        if(i+putere<n){
        dp[i][j]=min(dp[i][j-1],dp[i+putere-1][j-1]);
        }
        

        else{
        dp[i][j]=min(dp[i][j-1],dp[n-1][j-1]);
        }

        preprocesare(dp,n,j+1);
    }
}
}
int main(){
    int arr[100000];
    vector<vector<int>> dp;
    int i=0;
    int n,m,temp;
    in>>n>>m;
    for(int i=0;i<n;i++){
        in>>temp;
        dp.push_back(vector<int>{temp});
        dp[i].insert(dp[i].begin()+1,17,0);
    }

    preprocesare(dp,n,1);
    
    int x,y;
    for(int i=0;i<m;i++){
        in>>x>>y;
        int p=31-__builtin_clz(y-x+1);
        out<<min(dp[x-1][p],dp[y-(1<<p)][p])<<'\n';   
    }
}