Pagini recente » Cod sursa (job #3287753) | Cod sursa (job #2543013) | Cod sursa (job #1806734) | Cod sursa (job #1399767) | Cod sursa (job #1478108)
#include <iostream>
#include <fstream>
#define N 100005
#define in "arbint.in"
#define out "arbint.out"
using namespace std;
int arb[N*4 +50],val,poz;
int start,finish,maxim;
int left_son(int nod)
{
return nod*2;
}
int right_son(int nod)
{
return nod*2+1;
}
void Update(int nod,int left,int right)
{
if(left == right)
{
arb[nod] = val;
return;
}
int mij = (left + right)/2;
if(poz <= mij) Update(left_son(nod),left,mij);
else Update(right_son(nod),mij+1,right);
arb[nod] = max(arb[left_son(nod)],arb[right_son(nod)]);
}
void Query(int nod,int left,int right)
{
if(left>=start && right<=finish)
{
if(arb[nod]>maxim) maxim=arb[nod];
return;
}
int mij = (left+right)/2;
if(start<=mij) Query(left_son(nod),left,mij);
if(finish > mij) Query(right_son(nod),mij+1,right);
}
int main()
{
int p1,n,m,i;
ifstream f(in);
ofstream g(out);
f>>n>>m;
for(i=1;i<=n;i++)
{
f>>val;
poz=i;
Update(1,1,n);
}
for(i=1;i<=m;i++)
{
f>>p1>>start>>finish;
if(p1==0)
{
maxim=0;
Query(1,1,n);
g<<maxim<<"\n";
}
else
{
poz=start;
val=finish;
Update(1,1,n);
}
}
f.close();
g.close();
}