Cod sursa(job #2101970)

Utilizator DACSTEPStepan Dacian DACSTEP Data 8 ianuarie 2018 12:05:58
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 kb
#include <fstream>
#define ZERO 1000000000
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int N,k,p,Q,rez;
int Table[100001][20];
int main()
{
	f>>N>>Q;
	for (int i=1;i<=N;i++)
		f>>Table[i][0];
	/// se construieste Table
	k=0;
	p=1;
	while (p*2<=N)
	{
		k++;
		p=p*2;
	}
	for (int j=1;j<=k;j++)
		for (int i=1;i<=N-(1<<j)+1;i++)
			Table[i][j]=min(Table[i][j-1],Table[i+(1<<(j-1))][j-1]);
	/// se citesc si se solutioneaza interogarile
	/*for(int i=1;i<=N;i++)
    {
        for(int j=0;j<=k;j++)
            g<<Table[i][j]<<' ';
        g<<endl;
    }*/
	for (int q=1;q<=Q;q++)
	{
		int st,dr;
		f>>st>>dr;
		rez=ZERO;
		p=1;
		k=0;
		while(p<=dr-st+1)
            {p=p*2;
            k++;}
        p=p/2;
        k--;
		rez=min(Table[st][k],Table[dr-p+1][k]);        //dr-st+1
		g<<rez<<"\n";
	}
	return 0;
}