Cod sursa(job #1700423)

Utilizator braisaMiron Raisa braisa Data 10 mai 2016 15:01:02
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.74 kb
#include <fstream>
#include <algorithm>
#include <cmath>
 
using namespace std;
ifstream cin("rmq.in");
ofstream cout("rmq.out");
int N, M, A[100010], D[20][100010], l, x, y;
int main(){
        cin >> N >> M;
        for(int i = 1; i <= N; i++)
            cin >> A[i];
        for(int i = 1; i <= N; i++)
            D[0][i] = A[i];
        for(int i = 1; (1 << i) <= N; i++){
            for(int j = 1; j+(1 << i)-1 <= N; j++){
                D[i][j] = min(D[i-1][j], D[i-1][j+(1 << (i-1))]);
            }
        }
        for(int i = 1; i <= M; i++){
            cin >> x >> y;
            int diff = y-x+1;
            l = log2(diff);
            cout << min(D[l][x], D[l][y-(1 << l)+1]) << '\n';
            }
    return 0;
}