Cod sursa(job #2417953)

Utilizator AlexNeaguAlexandru AlexNeagu Data 2 mai 2019 15:22:46
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.89 kb
#include <fstream>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int T[20][100005];
int Logaritmi[100005],v[100005];
int n,m;
int main()
{
    ios_base::sync_with_stdio(false);

    fin>>n>>m;
    for (int i = 1; i <= n; i++)
        fin>>v[i];
    for (int i = 1; i <= n; i++)
        T[0][i] = v[i];
        Logaritmi[1] = 0;
    for (int i = 2 ; i <= n; i++)
        Logaritmi[i] = Logaritmi[i/2] + 1;
    for (int i = 1; (1 << i) <= n; i++)
        for (int j = 1; j<= n - (1 << i) + 1; j++)
    {
        int l = 1 << (i - 1);
        T[i][j] = min( T[i-1][j], T[i-1][j+l] );
    }
    for (int i = 1; i <= m; i++)
    {
        int x,y;
        fin>>x>>y;
        int l = y - x + 1;
        int k = Logaritmi[l];
        int a = l - (1 << k);
        int rezultat = min ( T[k][x], T[k][x+a] );
        fout<<rezultat<<"\n";
    }
    return 0;
}