Cod sursa(job #2758888)

Utilizator lahayonTester lahayon Data 14 iunie 2021 02:49:24
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.85 kb
#include <fstream>	
#include <vector>
#include <cmath>

using namespace std;

		
int main(){
	
    ifstream cin("rmq.in");
    ofstream cout("rmq.out");
	
    int N, M;
    cin >> N >> M;

    vector<int> A, log;
    vector<vector<int>> rmq;
 
    for(int x, i = 0; i < N; ++i){
        cin >> x;
        A.push_back(x);
        rmq.push_back(vector<int>((int)log2(N) + 1, 0));
        rmq[i][0] = x;
    }

    for(int j = 1; (1 << j) <= N; ++j){

        for(int i = 0; i + (1 << j) <= N; ++i)
            rmq[i][j] = min(rmq[i][j - 1], rmq[i + (1 << (j - 1))][j - 1]);
    }

    for(int x, y; M > 0; --M){

        cin >> x >> y;
        --x; --y;
        int log = (int)log2(y - x + 1);
        cout << min(rmq[x][log], rmq[y - (1 << log) + 1][log]) << "\n";
    }
	
    cin.close();
    cout.close();
	
    return 0;	
}