Cod sursa(job #1807441)

Utilizator cyber_ghSoltan Gheorghe cyber_gh Data 16 noiembrie 2016 16:43:45
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include <bits/stdc++.h>


using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int ind,val,arr[400005],left1,right1,n,m;


void update(int st,int dr,int poz){
	
	if (st==dr){
	 arr[poz]=val ;
	return;
}

	int mid=(st+dr)/2;
	if (ind<=mid) {
		update(st,mid,poz*2);
	}
	else {
		update(mid+1,dr,poz*2+1);
	}
	arr[poz]=max(arr[2*poz],arr[poz*2+1]);// sum

	
}


int querry(int st,int dr,int poz){//(1,n,1)
	
	if (st>=left1&&dr<=right1) return arr[poz];
	int a=-1,b=-1,mid=(st+dr)/2;
	if (left1<=mid) {
		a=querry(st,mid,poz*2);
	}
	if (right1>mid){
		b=querry(mid+1,dr,poz*2+1);
	}
	return max(a,b);//a+b
}

int main(){
	fin >>n>>m;
	for(int i=1;i<=n;i++) {
		int x;
		fin>>x;
		ind=i;
		val=x;
		update(1,n,1);
	}
	for(int i=1;i<=m;i++){
		int caz;
		fin>>caz;
		if (caz==1) {
			fin>>ind>>val;
			update(1,n,1);
		}
		if(caz==0) {
			fin>>left1>>right1;
			fout <<querry(1,n,1)<<"\n";
		}
	}
	
	return 0;
	
	
}