Cod sursa(job #3161464)

Utilizator Cazacu2006RazvanRazvan Cazacu Cazacu2006Razvan Data 27 octombrie 2023 10:55:09
Problema Range minimum query Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.8 kb
#include <fstream>

using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int rmq[31][100001],n,m,x,y,p[31];
int main()
{
    fin>>n>>m;
    for(int i=1;i<=n;i++)
        fin>>rmq[0][i];
    p[0]=1;
    for(int i=1;p[i]<=n;i++)
    {
        p[i]=p[i-1]*2;
    }
    for(int k=1;p[k]<=n;k++)
    {
        for(int i=1;i<=n;i++)
        {
            if(rmq[k-1][i+p[k-1]]==0)
                rmq[k][i]=rmq[k-1][i];
            else
            rmq[k][i]=min(rmq[k-1][i],rmq[k-1][i+p[k-1]]);
        }
    }

    for(int i=1;i<=m;i++)
    {
        fin>>x>>y;
        int k;
        for(k=0;p[k+1]<=y-x;k++);
        if(rmq[k][y-p[k]+1]==0)
            fout<<rmq[k][x]<<"\n";
        else
        fout<<min(rmq[k][x],rmq[k][y-p[k]+1])<<"\n";
    }


    return 0;
}