Cod sursa(job #705968)

Utilizator hunter_ionutzzzFarcas Ionut hunter_ionutzzz Data 5 martie 2012 11:44:35
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.2 kb
#include <fstream>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
#define dim 100001

int n,m;
int maxarb[4*dim+66];
int start, finish, val, pos, maxim;

inline void Update(int nod, int left, int right)
{int div;
    if (left == right)
    {   maxarb[nod] = val;
			return;
	}
    div = (left+right)/2;
	if (pos<=div) 
		Update(2*nod,left,div);
	else              
		Update(2*nod+1,div+1,right);
	maxarb[nod] = max(maxarb[2*nod],maxarb[2*nod+1]);
}
inline void Query(int nod,int left,int right)
{int div;
    if (start <= left && right <= finish)
	{   if (maxim < maxarb[nod]) 
			maxim = maxarb[nod];
		return;
	}
    div = (left+right)/2;
	if (start <= div) 
		Query(2*nod,left,div);
	if (div < finish) 
		Query(2*nod+1,div+1,right);
}
int main()
{int aux,a,b,x,i;
    fin >> n >> m;
    for (i=1;i<=n;i++)
    {   fin >> aux;
        pos = i;
		val = aux;
        Update(1,1,n);
    }   
    for (i=1;i<=m;i++)
    {   fin >> x >> a >> b;
        if (!x) 
        {   maxim = -1;
            start = a;
			finish = b;
            Query(1,1,n);
            fout << maxim << '\n';
        }
        else
        {   pos = a;
	        val = b;
            Update(1,1,n);
        }
    }
}