Cod sursa(job #2976576)

Utilizator Robert_MitriRobert Mitri Robert_Mitri Data 9 februarie 2023 16:34:28
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.79 kb
#include <fstream>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");


int n;


int rmq[20][100005];
int expon[100005];

int q;



int main()
{
    fin>>n;
    fin>>q;
    for(int i=1;i<=n;i++)
    {
        fin>>rmq[0][i];
    }
    for(int j=1;(1<<j)<=n;j++)
    {
        for(int x=1;x<=n;x++)
        {
            rmq[j][x]=rmq[j-1][x];
            int dr = x+(1<<(j-1));
            if(dr<=n)
            {
                rmq[j][x]=min(rmq[j][x],rmq[j-1][dr]);
            }
        }
    }
    for(int i=2;i<=n;i++)
    {
        expon[i]=expon[i/2]+1;
    }
    for(int i=1;i<=q;i++)
    {
        int x;
        int y;
        fin>>x>>y;
        int l = expon[y-x+1];
        fout<<min(rmq[l][x],rmq[l][y-(1<<l)+1])<<'\n';
    }

}