Cod sursa(job #678979)

Utilizator BarracudaFMI-Alex Dobrin Barracuda Data 12 februarie 2012 17:01:42
Problema Arbori de intervale Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include<fstream>
#define lim 100002
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int v[lim],ar[2*lim],n,m,a,i,b,poz,o,maxu;
void interogheaza(int nod,int st,int dr){
	if(a<=st && b>=dr){
		if(ar[nod]>maxu)
			maxu=ar[nod];
	}
	else{
		int mij=(st+dr)/2;
	    if(a<=mij)
		    interogheaza(2*nod,st,mij);
	    if(b>mij)
		    interogheaza(2*nod+1,mij+1,dr);
	}
}
void adauga(int nod,int st,int dr){
	if(st==dr)
		ar[nod]=v[poz];
	else{
		int mij=(st+dr)/2;
		if(poz<=mij)
			adauga(2*nod,st,mij);
		else
			adauga(2*nod+1,mij+1,dr);
		ar[nod]=ar[2*nod];
		if(ar[nod]<ar[2*nod+1])
			ar[nod]=ar[2*nod]+1;
	}	
}
int main (){
	f>>n>>m;
	for(i=1;i<=n;i++){
		f>>v[i];
		poz=i;
		adauga(1,1,n);
	}
	for(;m;m--){
		f>>o>>a>>b;
		if(o==0){
			maxu=-1;
			interogheaza(1,1,n);
			g<<maxu<<"\n";
		}
		else{
			poz=a;
			v[a]=b;
			adauga(1,1,n);
		}
	}
	return 0;
}