Cod sursa(job #1378460)

Utilizator valentinpielePiele Valentin valentinpiele Data 6 martie 2015 12:20:14
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.78 kb
#include <fstream>
#define min(x,y) ((x<y) ? x:y)
using namespace std;
 
ifstream f("rmq.in");
ofstream g("rmq.out");
 
const int Nmax=100005;
 
int v[20][Nmax];
int logaritm[Nmax];
int N, M;
int x, y;
int linie;

int main ()
{
    f >> N;
     
    logaritm[1]=0;
    for(int i=2; i<=N; i++) logaritm[i]=logaritm[i/2]+1;
    //for(int i=1; i<=N; i++) g << logaritm[i] << ' ' ;
     
    f >> M;
    for(int i=1; i<=N; i++) f >> v[0][i];
     
    for(int i=1; i<=logaritm[N]; i++)
        for(int j=1; j<=N-(1<<(i-1)); j++)
            v[i][j]=min(v[i-1][j], v[i-1][j+(1<<(i-1))]);
	
    for(int i=1; i<=M; i++)
    {
        f >> x >> y;
        linie=logaritm[y-x+1];
        g << min(v[linie][x],v[linie][y-(1<<linie)+1]) << '\n';
    }
     
    return 0;
}