Cod sursa(job #3160189)

Utilizator suimerchantsui merchant suimerchant Data 23 octombrie 2023 11:16:42
Problema Range minimum query Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.79 kb
#include <iostream>
#include <fstream>
using namespace std;


ifstream fin("rmq.in");
ofstream fout("rmq.out");


int n,q,x,y;
int v[100005];
int dp[17][17];


int main()
{
    fin>>n>>q;
    for(int i=1;i<=n;i++)
    {
        fin>>v[i];
    }
    for(int i=1;i<=n;i++)
    {
        dp[0][i]=v[i];
    }
    int p=1;
    for(int l=2;l<=n;l*=2)
    {
        for(int i=1;i<=n-l+1;i++)
        {
            dp[p][i]=min(dp[p-1][i],dp[p-1][i+l/2]);
        }
        p++;
    }
    for(int i=1;i<=q;i++)
    {
        fin>>x>>y;
        int lg=1;
        int pow=0;
        while(lg<=y-x+1)
        {
            lg*=2;
            pow++;
        }
        lg/=2;
        pow--;
        fout<<min(dp[pow][x],dp[pow][y-lg+1])<<"\n";
    }
    return 0;
}