Cod sursa(job #1152148)

Utilizator BlackLordFMI Alex Oprea BlackLord Data 24 martie 2014 16:10:09
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include <cstdio>
using namespace std;
int n, m, i, x, v[300010], l, a, b, t, maxim;

void update(int n, int p, int u){
	if(p==u)
	{
		v[n]=x;
		return;
	}
	int m=(p+u)/2;
	if(l<=m)
        update(n*2 , p, m);
    else if(l>m)
        update(n*2+1, m+1, u);
	v[n]=(v[n*2]>v[n*2+1]?v[n*2]:v[n*2+1]);
}

void querry(int n, int p, int u){
	if(a<=p && b>=u)
	{
		maxim=(maxim>v[n]?maxim:v[n]);
		return;
	}
	int m=(p+u)/2;
	if(a<=m)
		querry(2*n, p, m);
	if(b>m)
		querry(2*n+1, m+1, u);
}

int main(){
    freopen("arbint.in", "r", stdin);
    freopen("arbint.out", "w", stdout);
    scanf("%d %d", &n, &m);
    for(i=1; i<=n; i++)
    {
		scanf("%d", &x);
		l=i;
		update(1, 1, n);
    }
    for(i=1; i<=m; i++)
    {
		scanf("%d", &t);
		if(t==1)
		{
			scanf("%d %d", &l, &x);
			update(1, 1, n);
		}
		else
		{
			scanf("%d %d", &a, &b);
			maxim=0;
			querry(1, 1, n);
			printf("%d\n", maxim);
		}
    }
    return 0;
}