Cod sursa(job #668938)

Utilizator arcansielAlina Bratu arcansiel Data 25 ianuarie 2012 21:07:45
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include<fstream>
#include<vector>
using namespace std;
#define nmax 400005
#define maxim(a,b) (a<b)? b:a

int n,m,a,b,x,i,j,ma,sem;
int ar[nmax];
void actu(int,int,int);
void inter(int,int,int);

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) {
	  ma=0;
	  inter(1,1,n);
	  g<<ma<<'\n';
	}
	else {
	  x=b;
	  i=a;
	  actu(1,1,n);
	}
  }
  return 0;
}

void actu (int rad, int st, int dr) {
  if (st==dr) {
	ar[rad]=x;
	return;
	}
  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 (ma<ar[rad])
	  ma=ar[rad];
	}
  else {
    int mij=(st+dr)/2;
	if (a<=mij)
	  inter(rad*2,st,mij);
	if (b>mij)
	  inter(2*rad+1,mij+1,dr);
	}
}