Cod sursa(job #664404)

Utilizator arcansielAlina Bratu arcansiel Data 20 ianuarie 2012 03:23:20
Problema Arbori de intervale Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include<fstream>
#include<vector>
using namespace std;
#define nmax 200000
#define maxim(a,b) (a<b)? b:a

int n,m,a,b,x,i,j,max,sem;
vector<int> ar[nmax];

void actu (int rad, int st, int dr) {
  if (st==dr)
	ar[rad]=x;
  else {
    int mij=(st+dr)/2;
	if (i<=mij)
	  actu(2*rad, st, mij);
	else
	  actu(2*rad +1, mij+1,dr);
	ar[rad]=maxim(ar[2*rad],ar[2*rad+1]);
	}
}

void inter (int rad, int st, int dr) {
  if (a<=st && b>=dr) {
	if (max<ar[rad]) {
	  max=ar[rad];
	  return;
	  }
	}
  else {
    int mij=(st+dr)/2;
	if (a<=mij)
	  inter(rad*2,st,mij);
	if (b>mij)
	  inter(2*rad+1,mij+1,dr);
	}
}

int main() {
  ifstream f("arbint.in",ifstream::in);
  ofstream g(arbint.out",ifstream::out);
  f>>n>>m;
  for (i=1;i<=n;i++) {
    f>>x;
	actu(1,1,n);
	}
  for (j=1;j<=m;j++) {
    f>>sem>>a>>b;
	if (!sem) {
	  max=0;
	  inter(1,1,n);
	  g<<max<<'\n';
	}
	else {
	  x=b;
	  i=a;
	  actu(1,1,n);
	}
  }
  return 0;
}