Cod sursa(job #1266639)

Utilizator GeorgianBaditaBadita Marin-Georgian GeorgianBadita Data 18 noiembrie 2014 22:56:42
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.83 kb
#include <fstream>
using namespace std;

ifstream f("rmq.in");
ofstream g("rmq.out");
int d[20][100005], lg[100005];
int n, m, x, y, i, j, k;
int min(int x, int y)
{
    if(x <= y)
        return x;
    return y;
}
int main()
{
    f >> n >> m;
    lg[1] = 0;
    for(i = 2; i<=n; i++)
    lg[i] = lg[i / 2] + 1;
    for(i = 1; i<=n; i++)
        f >> d[0][i];
    for(i = 1; i<= lg[n]; i++)
    {
        for(j = 1; j<= n- (1<<(i - 1)); j++)
            d[i][j] = min(d[i- 1][j], d[i - 1][j + (1<<i-1)]);
    }
    /*for(i = 1; i<= lg[n]; i++)
    {
        for(j = 1; j<=n - (1<<(i-1)); j++)
            g << d[i][j] << ' ';
    g << '\n';
    }*/
    for(i = 1; i<=m; i++)
    {
        f >> x >> y;
        k = lg[y - x + 1];
        g << min(d[k][x], d[k][y- (1<<k) + 1]) << '\n';
    }
    return 0;
}