Pagini recente » Cod sursa (job #2434479) | Cod sursa (job #2059447) | Cod sursa (job #1034597) | Cod sursa (job #2324262) | Cod sursa (job #1236930)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
#define MAX 100002
int a[4*MAX], val, ind, l, r, n, maxim;
void update(int nod, int st, int dr)
{
if(st==dr)
{
a[nod]=val;
return;
}
int mij=(st+dr)>>1;
if(ind<=mij)
update(nod<<1, st, mij);
else
update((nod<<1)+1, mij+1, dr);
a[nod]=max(a[nod<<1], a[(nod<<1)+1]);
}
void query(int nod, int st, int dr)
{
if(l<=st && dr<=r)
{
maxim=max(maxim, a[nod]);
return;
}
int mij=(st+dr)>>1;
if(l<=mij)
query(nod<<1, st, mij);
if(r>=mij+1)
query((nod<<1)+1, mij+1, dr);
}
int Q(int st, int dr)
{
l=st;
r=dr;
maxim=-1;
query(1, 1, n);
return maxim;
}
void U(int i, int v)
{
ind=i;
val=v;
update(1, 1, n);
}
int main()
{
int m, i, t, x, y;
fin>>n>>m;
for(i=1;i<=n;i++)
{
fin>>x;
U(i, x);
}
while(m--)
{
fin>>t>>x>>y;
if(t==0)
fout<<Q(x, y)<<"\n";
else
U(x, y);
}
}