Cod sursa(job #3162386)

Utilizator adrian_zahariaZaharia Adrian adrian_zaharia Data 29 octombrie 2023 09:04:47
Problema Range minimum query Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.83 kb
#include <iostream>
#include <stdio.h>
using namespace std;
int mat[17][100010];
int main()
{
//    freopen("rmq.in","r",stdin);
//    freopen("rmq.out","w",stdout);

    int n,m;
    scanf("%d %d",&n,&m);
    for(int i=1;i<=n;i++)
        scanf("%d",&mat[0][i]);

    for(int p=1;(1<<p)<=n;p++)
        for(int i=1;i<=n;i++){
            mat[p][i]=mat[p-1][i];
            int j=i+(1<<(p-1));
            if(j<=n)
                mat[p][i]=min(mat[p][i],mat[p-1 ][j]);
        }

    int E[100010];
    E[1]=0;
    for(int i=2;i<=n;i++)
        E[i]=E[i/2]+1;

    for(int i=1;i<=m;i++){
        int st,dr;
        scanf("%d%d",&st,&dr);
        int putere=E[dr-st+1];
        int len=(1<<putere);
        int minim=min(mat[putere][st],mat[putere][dr-len+1]);
        printf("%d\n",minim);
    }
    return 0;
}