Cod sursa(job #2916468)

Utilizator Theo14Ancuta Theodor Theo14 Data 29 iulie 2022 21:40:40
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.76 kb
#include<bits/stdc++.h>
using namespace std;

ifstream f("rmq.in");
ofstream g("rmq.out");

int rmq[20][100005],e[100005],val[20],n;

void calculez()
{
    int x=2,k=1,i;
    while(x<=n)
    {
        for(i=1;i<=n-x+1;i++)
            rmq[k][i]=min(rmq[k-1][i],rmq[k-1][i+x/2]);
        x*=2;
        k++;
    }
}

int main()
{
    int m,i,x=1,y,k=0,xx,yy,t,nr,z;
    f>>n>>m;
    for(i=1;i<=n;i++)
        f>>rmq[0][i];
    for(i=1;i<=n;i++)
    {
        if(x*2==i)
        {
            x*=2;
            k++;
        }
        e[i]=k;
        val[k]=x;
    }
    calculez();
    for(i=1;i<=m;i++)
    {
        f>>xx>>yy;
        t=e[yy-xx+1];
        z=val[t];
        g<<min(rmq[t][xx],rmq[t][yy-z+1])<<'\n';
    }
    return 0;
}