Cod sursa(job #3040547)

Utilizator CelestinNegraru Celestin Celestin Data 29 martie 2023 23:49:47
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.84 kb
#include <fstream>
#define nmax 100005
#define mmax 18
using namespace std;
int n,m,dp[nmax][mmax],lg[nmax],v[nmax],st,dr;
ifstream f("rmq.in");
ofstream g("rmq.out");
void rmq()
{
    lg[1]=0;
    for(int i=2;i<=n;i++)
        lg[i]=lg[i>>1]+1;
    for(int i=0;i<n;i++)
        dp[i][0]=v[i];
    for(int j=1;(1<<j)<n;j++)
    {
        for(int i=0;i+(1<<j)-1<n;i++)
        {
            dp[i][j]=min(dp[i][j-1],dp[i+(1<<(j-1))][j-1]);
        }
    }
    return;
}
void solve()
{
    f>>n>>m;
    for(int i=0;i<n;i++)
        f>>v[i];
    rmq();
    for(int i=1;i<=m;i++)
    {
        f>>st>>dr;
        st--;
        dr--;
        int lun=dr-st+1;
        g<<min(dp[st][lg[lun]],dp[dr-(1<<lg[lun])+1][lg[lun]])<<'\n';
    }
    f.close();
    g.close();
    return;
}
int main()
{
    solve();
    return 0;
}