Cod sursa(job #1972264)

Utilizator valentinoMoldovan Rares valentino Data 22 aprilie 2017 17:06:58
Problema Arbori de intervale Scor 50
Compilator java Status done
Runda Arhiva educationala Marime 1.53 kb
import java.io.*;
import java.util.*;

class Main {
	 
    static int n;
    static int[] arb = new int[400020];
    static int maxim;
    static final long mod = 1999999973;
    
    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
	{
		Scanner reader = new Scanner(new FileInputStream("arbint.in"));
		PrintWriter writer = new PrintWriter(new FileWriter("arbint.out"));
		
		int x, q, y, m;
		n = reader.nextInt();
		m = reader.nextInt();
		for(int i = 1; i <= n; ++i)
		{
			x = reader.nextInt();
			Update(1, 1, n, x, i);
		}
		for(int i = 1; i <= m; ++i)
		{
			q = reader.nextInt();
			x = reader.nextInt();
			y = reader.nextInt();
			if(q == 0)
			{
				maxim = -1;
				Query(1, 1, n, x, y);
				writer.println(maxim);
			}
			else Update(1, 1, n, y, x);
		}
		reader.close();
		writer.close();
		
	}
	
}