Cod sursa(job #929840)

Utilizator dicu_dariaDaria Dicu dicu_daria Data 27 martie 2013 12:04:02
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.73 kb
#include <fstream>

using namespace std;

int i, n, k, sol, x, y, Log[100010], m, rmq[100010][20];

int main()
{
    ifstream fi("rmq.in");
    ofstream fo("rmq.out");
    fi >> n >> m;
    for(i = 2; i <= n; i++) Log[i] = Log[i/2] + 1;
    for(i = 1; i <= n; i++)
    {
        fi >> x;
        rmq[i][0] = x;
    }
    for(k = 1; (1<<k) <= n; k++)
        for(i = 1; i <= n; i++)
        {
            if(i+(1<<(k-1)) <= n)
            rmq[i][k] = min(rmq[i][k-1], rmq[i+(1<<(k-1))][k-1]);
            else rmq[i][k] = rmq[i][k-1];
        }
    while(m--)
    {
        fi >> x >> y;
        k = Log[y - x + 1];
        sol = min(rmq[x][k], rmq[y - (1<<k) + 1][k]);
        fo << sol << "\n";
    }
    return 0;
}