Cod sursa(job #1525185)

Utilizator bogdanciurezubogdan ciurezu bogdanciurezu Data 14 noiembrie 2015 20:14:36
Problema Range minimum query Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.77 kb
#include <fstream>

using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");

const int nmax = 100050;
int n, m, logaritm[nmax];
int mat[20][nmax];
int main()
{int s;
    f>>n>>m;

    for(int i = 1; i <= n; ++i)
        f>>mat[0][i];

    for(int i = 1; (i << 1) <= n; ++i){
        for(int j = 1; j <= n - (i << 1) + 1; ++j){
            s = 1 << (i - 1);
            mat[i][j] = min( mat[i - 1][j], mat[i - 1][j + s] );
        }
    }

    int dif;

    for(int i = 2; i <= n; ++i)
        logaritm[i] = logaritm[i >> 1] + 1;

    for(int i = 1, x, y; i <= m; ++i){
        f>>x>>y;

        dif = y - x + 1;

        g<<min(mat[ logaritm[dif] ][ x ], mat[ logaritm[dif] ][y - (1 << logaritm[dif] ) + 1 ] )<<'\n';
    }

    return 0;
}