Cod sursa(job #2615440)

Utilizator Razvank206Dumitriu Razvan Razvank206 Data 14 mai 2020 16:51:15
Problema Range minimum query Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.1 kb
#include <iostream>
#include <fstream>
#include <cmath>
const int N = 100001;
using namespace std;

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




int main()
{
    int n, m, v[N][21], a[N], lg, m1, m2, pow[21];
    f >> n >> m;
    for(int i=1; i<=n; i++)
    {
        f>>a[i];
        v[i][0] = i;
    }


    lg = log2(n);
    //g << lg;
    int p = 1;
    int cont=1;
    int j = 1;

    while( j <= lg)
    {
        for(int i; i+cont<=n; i++)

            if(a[v[i][j-1]] < a[v[i + p][j - 1]])

                v[i][j] = v[i][j-1];
            else
                v[i][j] = v[i + p][j - 1];
        p *= 2;
        cont += p;
        ++j;
    }

    pow[0] = 1;
    for(int i = 1; i <= 20; i ++)
        pow[i] = 2 * pow[i - 1];


    for(int i=1; i<=m; i++)
    {
        f >> m1 >> m2;
        int lungime= m2 - m1 + 1;
        lg = log2(lungime);

        if(a[v[m1][lg]] < a[v[m1 + lungime - pow[lg]][lg]])
            g << a[v[m1][lg]] << '\n';
        else
            g << a[v[m1 + lungime - pow[lg]][lg]] << '\n';




    }

    return 0;
}