Pagini recente » Cod sursa (job #2912098) | Istoria paginii runda/sim_oni_2007/clasament | Monitorul de evaluare | Cod sursa (job #176084) | Cod sursa (job #949984)
Cod sursa(job #949984)
#include<fstream>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
const int MAXN = 500001;
int N, M, a, b, poz, x, arb[MAXN], in, sf, val, maax;
int maxim(int a, int b)
{
if(a > b)
return a;
else
return b;
}
void update(int, int, int);
void query(int, int, int);
void update(int nod)
{
if(st == dr)
{
arb[nod] = val;
return;
}
int mij = (st + dr)/2;
if(poz <= mij)
return update(2*nod);
else
return update(2*nod+1, mij+1, dr);
arb[nod] = maxim(arb[2*nod], arb[2*nod+1]);
}
void query(int nod, int st, int dr)
{
if(in<=st && sf>=dr)
if(maax < arb[nod]){
maax = arb[nod];
return;
}
int mij = (st+dr)/2;
if(in <= mij)
query(2*nod, st, mij);
if(mij < sf)
query(2*nod+1, mij+1, dr);
}
int main()
{
int i;
fin >> N >> M;
for(i=1; i<=N; ++i)
{
fin >> x ;
poz = i;
val = x;
update(1, 1, N);
}
for(i=1; i<=M; ++i)
{
fin >> x >> a >> b;
if(x == 0){
maax = -1;
in = a;
sf = b;
query(1, 1, N);
fout << maax << "\n";
}
else
{
poz = a;
val = b;
update(1, 1, N);
}
}
fin.close();
fout.close();
return 0;
}