Cod sursa(job #2790871)

Utilizator Matei_PanzariuMatei Panzariu Matei_Panzariu Data 29 octombrie 2021 18:01:47
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.68 kb
#include<fstream>
using namespace std;
ifstream cin("rmq.in");
ofstream cout("rmq.out");
int n,q,rmq[100002][22];
int main()
{
    cin>>n>>q;
    for(int i=1;i<=n;i++)
        cin>>rmq[i][0];
    for(int lg=1,exp=1;lg<=n;lg*=2,exp++)
        for(int i=1;i+lg-1<=n;i++)
            rmq[i][exp]=min(rmq[i][exp-1],rmq[i+lg][exp-1]);
    for(int i=1;i<=q;i++)
    {
        int x,y;
        cin>>x>>y;
        if(x>y)
            swap(x,y);
        int lg=y-x+1;
        int p=1;
        int exp=0;
        while(p<=lg)
        {
            p*=2;
            exp++;
        }
        p/=2;
        exp--;
        cout<<min(rmq[x][exp],rmq[y-p+1][exp])<<'\n';
    }
}