Cod sursa(job #728842)

Utilizator costyv87Vlad Costin costyv87 Data 29 martie 2012 00:20:28
Problema Arbori de intervale Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
#include <cstdio>
#include <algorithm>
using namespace std;
#define nm 200100
FILE *f,*g;
int arb[nm];

int n,m,x,pos,y;

void update(int nod,int st, int dr) {
int m;
if (st==dr){ 
	arb[nod]=x;
	return;
	}
m=(st+dr)/2;

if (pos<=m) 
	update(nod*2,st,m);
if (pos>m)
	update(nod*2+1,m+1,dr);
arb[nod]=max(arb[nod*2],arb[nod*2+1]);
}

int query (int nod,int st,int dr) {
int v1,v2;
if (x<=st && dr<=y) return arb[nod];
int m=(st+dr)/2;
return max( (x<=m?query(nod*2,st,m):0), (y>m?query(nod*2+1,m+1,dr):0) );
}




void read() {
int i;
f=fopen("arbint.in","r");
g=fopen("arbint.out","w");
fscanf(f,"%d%d",&n,&m);

for (i=1;i<=n;i++) {
	fscanf(f,"%d",&x);
	pos=i;
	update(1,1,n);
	}
}

void solve() {
int i,z,a,b;

for (i=1;i<=m;i++) {
	fscanf(f,"%d%d%d",&z,&a,&b);
	if (z==0) {
		x=a;
		y=b;
		fprintf(g,"%d\n",query(1,1,n));
		}
	else {
		x=b;
		pos=a;
		update(1,1,n);
		}
	}


}

int main() {
read();
solve();

fclose(g);
return 0;
}