Cod sursa(job #1897676)

Utilizator gabor.vlad13lil pump gabor.vlad13 Data 1 martie 2017 17:09:41
Problema Range minimum query Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.25 kb
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#define NMAX 100005
#define MMAX 1000005
#define INF INT_MAX
using namespace std;
int var;
int n, m;
int mat[2 * NMAX][20];
int a[NMAX];

void initMat()
{
    for(int j=1;j<log2(n);j++)
    {
        for(int i=0;i<n;i++)
        {
            if(i+(1<<(j-1))<n)
                mat[i][j]=min(mat[i][j-1],mat[i+(1<<(j-1))][j-1]);
            else
                mat[i][j]=mat[i][j-1];
        }
    }


}

void afla(int x, int y)
{
    int var=log2(y-x+1);
    if(y-(1<<var)+1>=0)
        printf("%d\n",min(mat[x][var],mat[y-(1<<var)+1][var]));
    else
        printf("%d\n",mat[x][var]);
}
void init()
{
    for (int i=1; i<2*NMAX; i++)
        for (int j=0; j<20; j++)
            mat[i][j] = INF;
}

void read()
{
    int x, y;
    int var = ceil(log2(n));
    scanf("%d %d\n", &n, &m);
    for (int i=0; i<n; i++)
    {
        scanf("%d\n", &mat[i][0]);
        a[i] = mat[0][i];
    }
    //init();
    initMat();
    for (int i=0; i<m; i++)
    {
        scanf("%d %d\n", &x, &y);
        afla(x-1, y-1);
    }
}
int main()
{
    freopen("rmq.in", "r", stdin);
    freopen("rmq.out", "w", stdout);
    read();

    return 0;
}