Cod sursa(job #2292136)

Utilizator mirceaisherebina mircea mirceaishere Data 28 noiembrie 2018 23:41:00
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.59 kb
#include <fstream>

using namespace std;

ifstream fin ("rmq.in");
ofstream fout ("rmq.out");

int n, m, i, j, v[20][100002], lg[100002], st, dr, l, k, dist;

int main()
{
    fin>>n>>m;
    for(i=1; i<=n; i++){
        fin>>v[0][i];
    }

	lg[1]=0;
	for (i=2;i<=n;i++){
		lg[i]=lg[i/2]+1;
	}

 	for (i=1; i<=lg[n]+1; i++){
		for (j=1; j<=n-(1<<i)+1; j++){
		l=1<<(i-1);
		v[i][j]= min(v[i-1][j], v[i-1][j+l]);
		}
	}

    for(i =1; i<=m; i++){
        fin>>st>>dr;
        k=lg[dr-st+1];
        dist=(1<<k);
        fout<<min(v[k][st], v[k][dr-dist+1])<<"\n";
    }
}