Pagini recente » Cod sursa (job #2361484) | Cod sursa (job #1800879) | Cod sursa (job #387632) | Cod sursa (job #1570740) | Cod sursa (job #796629)
Cod sursa(job #796629)
#include<fstream>
#define nmax 100005
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int N, M, H[nmax * 2 + 100];
int val,poz;
int maxi;
int start, finish;
int max(int a, int b)
{
if(a > b)
return a;
else
return b;
}
void update(int nod, int st, int dr)
{
if(st == dr)
H[nod] = val;
else
{
int m = (st + dr) / 2;
if(poz <=m )
update(nod * 2, st, m );
else
update(nod * 2+ 1, m + 1,dr);
H[nod] = max(H[nod *2] , H[nod * 2 + 1]);
}
}
void read()
{
fin >>N >>M;
for(int i = 1; i <= N; i++)
{
int a;
fin >> a;
val = a;
poz = i ;
update(1,1,N);
}
}
void query(int nod, int st, int dr)
{
if(start <= st && dr<= finish)
{
maxi = max(maxi, H[nod]);
}
else
{
int m = (st + dr)/2;
if(start <= m)
query (nod * 2, st, m);
if(m < finish)
query(nod * 2 + 1, m + 1, dr);
}
}
int main()
{
read();
for(int i = 1; i <= M ;i++)
{
int type;
fin >> type>> start >> finish;
maxi = 0;
if(type==0 ){
query(1,1,N);
fout << maxi <<'\n';
}
else
{
poz = start;
val = finish;
update(1,1,N);
}
}
fin.close();
return 0;
}