Cod sursa(job #945707)

Utilizator OpportunityVlad Negura Opportunity Data 2 mai 2013 17:41:58
Problema Arbori de intervale Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
#include <cstdio>
using namespace std;
#define nmax 300000

int op,st,dr,x,n,m,i,t[nmax];

inline int max(int a, int b){
	if (a>b) return a; return b;
}

inline void add(int nod,int st,int dr){
	if (st==dr) t[nod]=x; else{
		int mid=(st+dr)/2;
		if (i<=mid) add(nod*2,st,mid);
		else add(nod*2+1,mid+1,dr);
		t[nod]=max(t[nod*2],t[nod*2+1]);
	}
}

inline int get(int nod,int st,int dr){
	if (i<=st && x>=dr) return t[nod]; else{
		int mid=(st+dr)/2,r1=0,r2=0;
		if (i<=mid) r1=get(nod*2,st,mid);
		if (x>mid) r2=get(nod*2+1,mid+1,dr);
		return max(r1,r2);
	}
}

int main(){
	
	freopen("arbint.out","w",stdout);
	freopen("arbint.in","r",stdin);
		
	scanf("%d%d",&n,&m);
	for (i=1; i<=n; i++){
		scanf("%d",&x);
		add(1,1,n);
	}

	while (m--){
		scanf("%d%d%d",&op,&i,&x);
		if (op) add(1,1,n);
		else printf("%d\n",get(1,1,n));
	}
	
	return 0;
}