Cod sursa(job #3352055)

Utilizator marap2011Paun Mara marap2011 Data 23 aprilie 2026 14:48:21
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.78 kb
#include <bits/stdc++.h>
#define int long long
using namespace std;

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

int rmq[30][100001] ;
int e[100001] ;

signed main()
{
    int n , q ;
    fin >> n >> q ;
    for ( int i = 0 ; i < n ; i ++ )
        fin >> rmq[0][i] ;

    for ( int i = 2 ; i <= n ; i ++ )
        e[i] = 1 + e[i/2] ;
    for ( int j = 1 ; ( 1 << j ) <= n ; j ++ )
        for ( int i = 0 ; i + ( 1 << j ) - 1 < n ; i ++ )
            rmq[j][i] = min ( rmq[j-1][i] , rmq[j-1][i+(1<<(j-1))] ) ;

    while ( q -- )
    {
        int st , dr ;
        fin >> st >> dr ;
        st -- ;
        dr -- ;
        int k = e[dr-st+1] ;
        fout << min ( rmq[k][st] , rmq[k][dr-(1<<k)+1] ) ;
        fout << '\n' ;
    }

    return 0;
}