Pagini recente » Istoria paginii runda/k/clasament | Cod sursa (job #747919) | Cod sursa (job #1264126) | Cod sursa (job #3126630) | Cod sursa (job #1016536)
#include <fstream>
#include <algorithm>
#define Nmax 100099
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int N,M,Arb[4*Nmax+99],start,finish,val,poz,Max;
void Update(int nod, int left, int right)
{
//daca am gasit locul pun pe val
if (left==right)
{
Arb[nod]=val;
return;
}
int middle=(left+right)/2;
if (poz<=middle)Update(2*nod,left,middle);
else Update(2*nod+1,middle+1,right);
Arb[nod]=max(Arb[2*nod],Arb[2*nod+1]);
}
void Query(int nod, int left, int right)
{
if ( start <= left && right <= finish )
{
if (Max<Arb[nod])Max=Arb[nod];
return;
}
int middle=(left+right)/2;
if (start<=middle)Query(2*nod,left,middle);
if (middle<finish)Query(2*nod+1,middle+1,right);
}
inline void ReadInput()
{
//citesc sirul de numere si formez arborele initial
f>>N>>M;
for (int i=1;i<=N;++i)
{
f>>val; poz=i;
Update(1,1,N);
}
}
inline void Solve()
{
for (int i =1;i<=M;++i)
{
int tip,a,b;
f>>tip>>a>>b;
if (!tip)
{
Max=-1;
start=a,finish=b;
Query(1,1,N);
g<<Max<<'\n';
}
else
{
poz=a,val=b;
Update(1,1,N);
}
}
}
int main()
{
ReadInput();
Solve();
f.close();g.close();
return 0;
}