Cod sursa(job #3122995)

Utilizator yellowGreenFatu Mihai yellowGreen Data 21 aprilie 2023 16:21:26
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.64 kb
#include <fstream>
using namespace std;
ifstream cin("rmq.in");
ofstream cout("rmq.out");
int A[100005],n,q,RMQ[20][100005];
void process()
{
    for(int j=1;(1<<j)<=n;++j)
        for(int i=1;i+(1<<(j-1))<=n;i++)
            RMQ[j][i]=min(RMQ[j-1][i],RMQ[j-1][i+(1<<(j-1))]);
}
int rmq(int x,int y)
{
    int l=y-x+1,k=0;
    for(k=0;1<<k<=l;++k);
        k--;
    return min(RMQ[k][x],RMQ[k][y-(1<<k)+1]);
}
int main()
{
    cin>>n>>q;
    for(int i=1;i<=n;++i)
        cin>>RMQ[0][i];
    process();
    for(int i=1;i<=q;i++)
    {
        int x,y;
        cin>>x>>y;
        cout<<rmq(x,y)<<"\n";
    }
    return 0;
}