Cod sursa(job #2870838)

Utilizator k2y201342asdfadfsafsd k2y20 Data 12 martie 2022 16:46:30
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.77 kb
#include <bits/stdc++.h>
using namespace std;

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

const int N=1e5,k=20;
int v[N+5];
int sparset[N+5][k+5];

void init(int n)
{
    for (int i = 0; i < n; i++)
        sparset[i][0] = v[i];

    for (int j = 1; (1 << j) <= n; j++)
    for (int i = 0; (i + (1 << j) - 1) < n; i++)
        sparset[i][j]=min(sparset[i][j - 1],sparset[i + (1 << (j - 1))][j - 1]);
}

int query(int st,int dr)
{
    int j = (int)log2(dr - st + 1);

    return min(sparset[st][j] , sparset[dr - (1 << j) + 1][j]);
}

int main()
{
    int n,m; in>>n>>m;
    for(int i=0; i<n; i++) in>>v[i];

    init(n);
    for(int i=1; i<=m; i++)
    {
        int x,y; in>>x>>y;

        out<<query(x-1,y-1)<<'\n';
    }
    return 0;
}