Cod sursa(job #1506871)

Utilizator narcis_vsGemene Narcis - Gabriel narcis_vs Data 21 octombrie 2015 00:45:34
Problema Range minimum query Scor 40
Compilator java Status done
Runda Arhiva educationala Marime 0.94 kb
import java.io.*;
import java.util.Scanner;
public class Main {
	static int [][] rmq = new int [18][100002];
	static int [] log = new int [100002];
	public static void main(String []args) throws IOException
	{
		Scanner in = new Scanner(new FileInputStream("rmq.in"));
		PrintWriter out = new PrintWriter("rmq.out");
		int n = in.nextInt(), x, y;
		int m = in.nextInt();
		for(int i=1;i<=n;++i)
			rmq[0][i] = in.nextInt();
		for(int i=2;i<=n;++i)
			log[i] = log[i/2]+1;
		for(int i=1;i<18;++i)
		{
			int p = 1<<(i-1);
			for(int j = 1;j + 2*p-1 <= n;++j)
				rmq[i][j] = min(rmq[i-1][j],rmq[i-1][j+p]);
		}
		while(m-->0)
		{
			x = in.nextInt();
			y = in.nextInt();
			out.write(String.valueOf(Query(x,y))+"\n");
		}
		in.close();
		out.close();
	}
	public static int min(int x,int y)
	{
		return x<=y?x:y;
	}
	public static int Query(int x,int y)
	{
		int L = log[y-x+1];
		return min(rmq[L][x],rmq[L][y-(1<<L)+1]);
	}
}