Cod sursa(job #3299329)

Utilizator TeogaloiuTeodor Galoiu Teogaloiu Data 5 iunie 2025 13:46:47
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.7 kb
#include <fstream>
#include <cmath>
using namespace std;
ifstream cin ("rmq.in");
ofstream cout ("rmq.out");
int dp[18][100001];
int intervalFinder(int a,int b)
{
    int dif=b-a+1;
    int x=log2(dif);
    return x;
}
int main()
{
    int n,m;
    cin>>n>>m;
    for(int i=1;i<=n;i++)
            cin>>dp[0][i];
    for(int k=1;k<=18;k++)
        for(int i=1;i+(1<<k)-1<=n;i++)
        {
            int previousSize=(1<<(k-1));
            dp[k][i]=min(dp[k-1][i],dp[k-1][i+previousSize]);
        }
    for(int k=1;k<=m;k++)
    {
        int x,y;
        cin>>x>>y;
        int lvl=intervalFinder(x,y);
        cout<<min(dp[lvl][x],dp[lvl][y-(1<<lvl)+1])<<"\n";
    }
    return 0;
}