Pagini recente » Cod sursa (job #1194012) | Cod sursa (job #1439801) | Cod sursa (job #2966293) | Cod sursa (job #2892554) | Cod sursa (job #623667)
Cod sursa(job #623667)
#include<fstream>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int a[400010];
int n, m;
int maxim, v, p, start, finish;
void Update(int nod, int st, int dr);
void Query(int nod, int st, int dr);
void Read();
int main()
{
Read();
fin.close();
fout.close();
return 0;
}
void Read()
{
fin >> n >> m;
int x;
for(int i = 1; i <= n; ++i)
{
fin >> x;
v = x;
p = i;
Update(1, 1, n);
}
int y, z, t;
for(int i = 1; i <= m; ++i)
{
fin >> y >> z >> t;
if( y == 1)
{
p = z;
v = t;
Update(1, 1, n);
}
else
{
start = z;
finish = t;
maxim = -9999;
Query(1, 1, n);
fout << maxim << '\n';
}
}
}
void Update(int nod, int st, int dr)
{
if(st == dr)
{
a[nod] = v;
return;
}
int mij = (st+dr) >> 1;
if(p <= mij)
Update( 2*nod, st, mij);
else
Update( 2*nod+1, mij+1, dr);
a[nod] = max( a[2*nod], a[2*nod+1] );
}
void Query(int nod, int st, int dr)
{
if(start <= st && finish >= dr)
{
if(maxim < a[nod])
maxim = a[nod];
return;
}
int mij = (st+dr) >> 1;
if( start <= mij)
Query(2 * nod, st, mij);
if( finish > mij )
Query(2 * nod + 1, mij+1, dr);
}