Cod sursa(job #3242675)

Utilizator BOSSSTEFANPetrescu Ioan Stefan BOSSSTEFAN Data 13 septembrie 2024 11:14:31
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.77 kb
#include <fstream>

using namespace std;
ifstream cin("rmq.in");
ofstream cout("rmq.out");
int v[100001],dp[100001][17];
int main()
{
    int n,m,i,j,x,y,nr,k;
    cin>>n>>m;
    for(i=1;i<=n;i++)
    {
        cin>>v[i];
        dp[i][0]=i;
    }
    for(j=1;(1<<j)<=n;j++)
    {
        for(i=1;i-1+(1<<j)<=n;i++)
        {
            if(v[dp[i][j-1]]<=v[dp[i+(1<<(j-1))][j-1]])
                dp[i][j]=dp[i][j-1];
            else
                dp[i][j]=dp[i+(1<<(j-1))][j-1];
        }
    }
    for(i=1;i<=m;i++)
    {
        cin>>x>>y;
        nr=y-x+1;
        k=0;
        while(nr>0)
        {
            k++;
            nr>>=1;
        }
        k--;
        cout<<min(v[dp[x][k]],v[dp[y-(1<<k)+1][k]])<<'\n';
    }
    return 0;
}