Cod sursa(job #3041816)

Utilizator alinatomi14Tomita Alina alinatomi14 Data 1 aprilie 2023 19:48:02
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.63 kb
#include <bits/stdc++.h>
#define L long long
using namespace std;
ifstream in("rmq.in");
ofstream out("rmq.out");
int n,m,r[18][100001],p[100001],l,x,y;
int main()
{
    in>>n>>m;
    for(int i=1; i<=n; ++i)
    {
        in>>r[0][i];
        if(i==1)
            p[i]=0;
        else p[i]=p[i/2]+1;
    }
    for(int i=1; (1<<i)<=n; ++i)
        for(int j=1; j<=n-(1<<i)+1; ++j)
            l=1<<(i-1),r[i][j]=min(r[i-1][j],r[i-1][j+l]);
    for(int i=1; i<=m; ++i)
    {
        in>>x>>y;
        int df=y-x+1;
        int lg=p[df];
        int sh=df-(1<<lg);
        out<<min(r[lg][x],r[lg][x+sh])<<'\n';
    }
}