Cod sursa(job #2260677)

Utilizator b10nd3Oana Mancu b10nd3 Data 15 octombrie 2018 12:58:36
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1 kb
#include<iostream>
#include<fstream>

using namespace std;

#define MAX 100005

int maxArb[4*MAX+66], poz, val, a, b, maxx;

void update(int nod, int left, int right){
     if(left==right){
     	maxArb[nod]=val;  
		return;  
	 }
	 int mid=(left+right)/2;
	 if(poz<=mid) update(nod*2,left,mid);
	 else  update(2*nod+1,mid+1,right);
	 maxArb[nod]=max(maxArb[2*nod],maxArb[2*nod+1]);
}


void getMax(int nod, int left, int right){
	if(a<=left && right<=b){
		maxx=max(maxx,maxArb[nod]);
		return;
	}
	int mid=(left+right)/2;
	if(a<=mid) getMax(2*nod,left,mid);
	if(mid<b) getMax(2*nod+1,mid+1,right);
}


int main(){
	int i,n,m,c;
	ifstream in("arbint.in"); 
	FILE *out = fopen("arbint.out","w");
	in>>n>>m; 
	for(i=1;i<=n;i++){
		poz=i; in>>val;
		update(1,1,n);
	}
	for(i=1;i<=m;i++){
		in>>c>>a>>b;
		if(c==0){
			maxx=-1;
			getMax(1,1,n);
			fprintf(out,"%d\n",maxx);
		}
		else{
			poz=a, val=b;
			update(1,1,n);
		}
	}
	
	in.close(); fclose(out);
	return 0;
}