Cod sursa(job #727700)

Utilizator mening12001Andrei Geogescu mening12001 Data 28 martie 2012 10:55:39
Problema Arbori de intervale Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.82 kb
#include<iostream>
#include<fstream>
using namespace std;
long maxx[199999],A;

void update(int k,int s,int d,int a)
{if(s==d)
	maxx[k]=A;
else 
{	int mij=(s+d)/2;
if(a<=mij)
	update(k*2,s,mij,a);
else
	update(k*2+1,mij+1,d,a);
if(maxx[k*2+1]>maxx[k*2])
	maxx[k]=maxx[k*2+1];
else
	maxx[k]=maxx[k*2];}}

int maxim(int k,int s,int d,int st,int dr)
{if(st<=s&&d<=dr)
	return maxx[k];
int mij=(s+d)/2,sol1=-1,sol2=-1;
if(st<=mij)
	sol1=maxim(k*2,s,mij,st,dr);
if(dr>mij)
	sol2=maxim(k*2+1,mij+1,d,st,dr);
if(sol1>=sol2)
	return sol1;
return sol2;}

int main()
{ifstream f("arbint.in");
ofstream h("arbint.out");	
long n,m,i,p,X,Y,Z;
f>>n>>m;
for(i=1;i<=n;i++)
{f>>A;
update(1,1,n,i);}
for(i=1;i<=m;i++)
{f>>X>>Y>>Z;
if(X==0)
h<<maxim(1,1,n,Y,Z)<<'\n';
else
{A=Z;
update(1,1,n,Y);}}	
	
return 0;}