Cod sursa(job #2339014)

Utilizator victorv88Veltan Victor victorv88 Data 8 februarie 2019 11:35:12
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.83 kb
#include <iostream>
#include <fstream>
#include <cmath>

using namespace std;

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

int n, m, val_log, table[100005][20], st, dr;

void creeare_table(int table[][20])
{
    for (int col=1, putere=2; putere<=n; putere<<=1,col++)
    {
        for (int lin=1; lin+putere-1<=n; lin++)
        {
            table[lin][col]=min(table[lin][col-1],table[lin+(putere>>1)][col-1]);
        }
    }
}

int rezolvare_query(int st, int dr)
{
    int dif=dr-st+1;
    val_log=(int)log2(dif);
    return min(table[st][val_log],table[dr-(1<<(val_log))+1][val_log]);
}

int main() {
    f >> n >> m;
    for (int i=1; i<=n; i++)
    {
        f >> table[i][0];
    }
    creeare_table(table);
    for (int query=1; query<=m; ++query)
    {
        f >> st >> dr;
        g << rezolvare_query(st,dr) << '\n';
    }
    return 0;
}