Cod sursa(job #2787967)

Utilizator Matei_PanzariuMatei Panzariu Matei_Panzariu Data 24 octombrie 2021 15:04:37
Problema Range minimum query Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.81 kb
#include<fstream>
using namespace std;
ifstream cin("rmq.in");
ofstream cout("rmq.out");
int rmq[100002][22],n,q;
int main()
{
    cin>>n>>q;
    for(int i=1;i<=n;i++)
        cin>>rmq[i][0];
    for(int lg=2,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/2][exp-1]);
    for(int i=1;i<=n;i++)
    {
        for(int j=0;j<=n;j++)
            cout<<rmq[i][j]<<' ';
        cout<<'\n';
    }
    for(int k=1;k<=q;k++)
    {
        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';
    }
}