Cod sursa(job #2280258)

Utilizator Dragne.Andrei11Dragne Andrei Dragne.Andrei11 Data 10 noiembrie 2018 13:07:23
Problema Range minimum query Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.76 kb
#include <bits/stdc++.h>

using namespace std;

const int nmax=50005;
const int pmax=50;

int v[nmax];
int d[nmax][pmax];
int loga[nmax];

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", &v[i]);
    for(int i=1;i<=n;i++)
        d[i][0]=v[i];
    for(int p=1;(1<<p)<n;p++)
        for(int i=1;i+(1<<p)-1<=n;i++)
            d[i][p]=min(d[i][p-1], d[i+(1<<p-1)][p-1]);
    loga[1]=0;
    for(int i=2;i<=n;i++)
        loga[i]=loga[i/2]+1;
    for(m;m>0;m--)
    {
        int i, j;
        scanf("%d%d", &i, &j);
        printf("%d\n", min(d[i][loga[j-i]], d[j-(1<<loga[j-i])+1][loga[j-i]]));
    }

    return 0;
}