Cod sursa(job #2739557)

Utilizator CronosClausCarare Claudiu CronosClaus Data 8 aprilie 2021 18:09:47
Problema Range minimum query Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.95 kb
#include <bits/stdc++.h>
#define pp pair< int, int >

using namespace std;

const int mxn = 100 * 1000 + 10;
const int mxm = 1000;

int n, m;

int v[ mxn ];
int rmq[ mxm ];
int sq;

inline int minInterval(int x, int y){
    int sol = INT_MAX;
    int i;
    for(i = x; i % sq != 0; i++){
        sol = min(sol, v[ i ]);
    }
    for(i; i < y / sq * sq; i += sq){
        sol = min(sol, rmq[ i / sq ]);
    }
    for(i; i <= y; i++){
        sol = min(sol, v[ i ]);
    }
    return sol;
}

int main()
{
    ifstream cin("rmq.in");
    ofstream cout("rmq.out");

    cin>> n >> m;

    sq = sqrt( n );

    for(int i = 0; i <= sq; i++){
        rmq[ i ] = INT_MAX;
    }

    for(int i = 0; i < n; i++){
        cin>>v[ i ];
        rmq[ i / sq ] = min(v[ i ], rmq[ i / sq ]);
    }

    for(int i = 0, x, y; i < m; i++){
        cin>> x >> y;
        cout<< minInterval(x - 1, y - 1 ) << '\n';
    }

    return 0;
}