Cod sursa(job #3040542)

Utilizator CelestinNegraru Celestin Celestin Data 29 martie 2023 23:27:23
Problema Range minimum query Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.83 kb
#include <fstream>
#define nmax 100005
#define mmax 19
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]);
        }
    }
    f.close();
    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';
   }
   g.close();
   return;
}
int main()
{
    solve();
    return 0;
}