Cod sursa(job #2751612)

Utilizator oporanu.alexAlex Oporanu oporanu.alex Data 15 mai 2021 13:31:28
Problema Range minimum query Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.87 kb
#include <bits/stdc++.h>
using namespace std;

ifstream f("rmq.in");
ofstream g("rmq.out");
int main()
{
    int N, i, j, M;

    f >> N >> M;
    int v[105], rmq[1005][12];
    for (i = 0; i < N; ++i)
        f >> v[i];
    for (i = 0; i < N; ++i)
      rmq[i][0] = i;
    for (j = 1; (1 << j) <= N; j++)
      for (i = 0; i + (1 << j) - 1 < N; ++i)
        if (v[rmq[i][j - 1]] < v[rmq[i + (1 << (j - 1))][j - 1]])
          rmq[i][j] = rmq[i][j - 1];
        else
          rmq[i][j] = rmq[i + (1 << (j - 1))][j - 1];

    int a, b, k;

    for(i = 0; i < M; ++i)
    {
        int k = 0;
        f >> a >> b;
        --a;
        --b;
        int smk = b - a + 1;
        while ((1 << k) < smk)
            ++k;
        if (1 << k > smk)
            --k;
        cout << min(v[rmq[a][k]], v[rmq[b - (1 << k) + 1][k]]) << "\n";
    }

    return 0;
}