Cod sursa(job #2230012)

Utilizator ElizaTElla Rose ElizaT Data 8 august 2018 18:45:55
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include <bits/stdc++.h>
#define VAL 300005
#define INF 100000005

using namespace std;

ifstream fin("rmq.in");
ofstream fout("rmq.out");

int rmq[VAL][25],log1[VAL],v[VAL];

int main()
{
    int n,m,p = 0,ans,x,y,a,b;
    fin >> n >> m;
    for (int i = 1;i <= n;i++)
    {
        fin >> v[i];
        rmq[i][0] = v[i];
        log1[i] = p;
        if (i == 2 * (1 << p))
            p++;
    }
    for (int j = 1;j <= p;j++)
        for (int i = 1;i <= n;i++)
            rmq[i][j] = INF;
    for (int j = 1;j <= p;j++)
        for (int i = 1;i + (1 << j) - 1 <= n;i++)
            rmq[i][j] = min(rmq[i][j - 1], rmq[i + (1 << (j - 1))][j - 1]);
    for (int i = 1;i <= m;i++)
    {
        fin >> x >> y;
        a = log1[y - x + 1];
        b = (1 << a);
        ans = min(rmq[x][a], rmq[y - b + 1][a]);
        fout << ans << '\n';
    }
    return 0;
}