Cod sursa(job #2441771)

Utilizator lucian2015blaugranadevil lucian2015 Data 20 iulie 2019 23:45:38
Problema Arbori de intervale Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.05 kb
#include <fstream>


#define INF 10000

using namespace std;


ifstream f("arbint.in");
ofstream g("arbint.out");


class arboreintervale{
private:
	int *arb;
public:
	arboreintervale(int n){
		arb=new int[n+2];
	}
	~arboreintervale(){
		delete []arb;
	}
	void update(int p,int st, int dr, int val, int poz){
		if(st==dr){
			arb[p]=val;
			return;
		}
		int mij=(st+dr)/2;
		if( poz<=mij){
			update(2*p,st,mij,val,poz);
		}
		else{
			update(2*p+1,mij+1,dr,val,poz);
		}
      arb[p] = max(arb[2*p], arb[2*p+1]);
	}
    int query(int p, int st, int dr, int a, int b){
 		if( a<=st && dr<=b ){
 			return arb[p];
 		}
 		int mij=(st+dr)/2, m1=-INF, m2=-INF;
 		if(a<=mij)
 			 m1=query(2*p,st,mij,a,b);
 		if(b>mij)
 			 m2=query(2*p+1,mij+1,dr,a,b);
 			return max(m1,m2);
   } 

};

int main(){
int n, m, x, i, poz, val, a, b;
 f>>n>>m;
 arboreintervale arb(n);
 for(i=1;i<=n;++i){
 	f>>x;
 	arb.update(1,1,n,x,i);
 }
 for(i=1;i<=m;++i){
 	f>>x;
 	if(x==1){
 		f>>poz>>val;
 		arb.update(1,1,n,val,poz);
 	}
 	else{
 		f>>a>>b;
 		g<<arb.query(1,1,n,a,b)<<"\n";
 	}
 }
 
}