Cod sursa(job #1042695)

Utilizator jul123Iulia Duta jul123 Data 27 noiembrie 2013 16:47:00
Problema Range minimum query Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.83 kb
#include<iostream>
#include<cstdio>

using namespace std;

int d[100000][17], maxpow[17];
void precalculez()
{
    maxpow[1] = 0;
    for(int i = 2; i < 17; i ++)
        maxpow[i]=maxpow[i/2] + 1;
}
int main()
{
    FILE *fin, *fout;
    fin=fopen("rmq.in", "r");
    fout=fopen("rmq.out", "w");

    int i, n, m, x, y, lg, j, l;
    fscanf(fin, "%d %d", &n, &m);
    precalculez();
    lg=maxpow[n];
    for(i = 1; i <= n; i++)
        fscanf(fin, "%d", &d[i][0]);
    for(i = 1; i <= lg; i ++)
        for(j = 1; j <= n; j++)
            d[j][i]=min(d[j][i - 1], d[j+(1 << (i-1))][i - 1]);
    for(i = 0; i < m; i++)
        {
            fscanf(fin, "%d %d", &x, &y);
            l = y - x + 1;
            fprintf(fout, "%d\n", min(d[x][maxpow[l]], d[1 + y - (1 << (maxpow[l]))][maxpow[l]]));
        }
}