Cod sursa(job #2001913)

Utilizator valentinoMoldovan Rares valentino Data 18 iulie 2017 00:31:09
Problema Arbori de intervale Scor 0
Compilator java Status done
Runda Arhiva educationala Marime 2.03 kb
import java.io.*;
import java.util.*;

class Main {
	 
    static int n;
    static int[] arb = new int[400020];
    static int[] values;
    static int maxim;
    static final long mod = 1999999973;
    
    public static int[] parseLine(String line)
    {
    	String[] elements = line.split(" ");
    	int[] result = new int[elements.length];
    	
    	for(int i = 0; i < elements.length(); ++i)
    	{
    		result[i] = Integer.parseInt(elements[i]);
    	}
    	return result;
    }
    
    private static void Update(int node, int st, int dr, int value, int position)
	{
		int m;
		if(st == dr)
		{
			arb[node] = value;
			return;
		}
		m = (st + dr) >> 1;
		if(position <= m) Update(2 * node, st, m, value, position);
		else Update(2 * node + 1, m + 1, dr, value, position);
		arb[node] = Math.max(arb[2 * node], arb[2 * node + 1]);
	}

	
	public static void Query(int node, int st, int dr, int left, int right)
	{
		int m;
		if(left <= st && dr <= right)
		{
			maxim = Math.max(maxim, arb[node]);
			return;
		}
		m = (st + dr) >> 1;
		if(m >= left) Query(2 * node, st, m, left, right);
		if(m < right) Query(2 * node + 1, m + 1, dr, left, right);
		
	}
    
	public static void main(String[] args) throws IOException
	{
		BufferedReader reader = new BufferedReader(new FileReader("arbint.in"));
		BufferedWriter writer = new BufferedWriter(new FileWriter("arbint.out"));
		
		String line = reader.parseInt();
		int[] numbers = parseLine(line);	
		
		int x, q, y, m;
		n = numbers[0];
		m = numbers[1];
		
		line = reader.readLine();
		values = parseLine(line);
		for(int i = 1; i <= n; ++i)
		{
			x = values[i - 1];
			Update(1, 1, n, x, i);
		}
		for(int i = 1; i <= m; ++i)
		{
			line = reader.readLine();
			numbers = parseLine(line);
			q = numbers[0];
			x = numbers[1];
			y = numbers[2];
			if(q == 0)
			{
				maxim = -1;
				Query(1, 1, n, x, y);
				writer.write(maxim);
			}
			else Update(1, 1, n, y, x);
		}
		reader.close();
		writer.close();
		
	}
	
}