Cod sursa(job #578314)

Utilizator nautilusCohal Alexandru nautilus Data 11 aprilie 2011 10:45:55
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
#include<fstream>
#include<cmath>
#define dmax 100010
#define inf 99999
using namespace std;

int n,m;
int a[dmax];
long long rmq[20][dmax];


void calculare_rmq()
{
 int i,j;
    
 for (i=1; i<=log2(n); i++)
	 for (j=1; j<=n-(1<<i)+1; j++)
		 rmq[i][j] = min(rmq[i-1][j], rmq[i-1][j + (1<<(i-1))]);
}


void citire()
{
 int i;
 int x,y;
 int loga;
    
 ifstream fin("rmq.in");
 ofstream fout("rmq.out");
 
 fin>>n>>m;
 for (i=1; i<=n; i++)
     {
      fin>>a[i];
      rmq[0][i] = a[i];
     }
 
 calculare_rmq();
    
 for (i=1; i<=m; i++)
     {
      fin>>x>>y;
      loga = log2(y-x+1);
	  
      fout<< min(rmq[loga][x], rmq[loga][y+1-(1<<loga)])<<'\n';
     }
 
 fin.close();
 fout.close();
}


int main()
{
    
 citire();
    
 return 0;
}