Pagini recente » Cod sursa (job #1127147) | Cod sursa (job #1425657) | Cod sursa (job #2584897) | Cod sursa (job #3245131) | Cod sursa (job #832294)
Cod sursa(job #832294)
#include <fstream>
using namespace std;
const char IN[] = "arbint.in";
const char OUT[] = "arbint.out";
ifstream fin(IN);
ofstream fout(OUT);
const int KMAX = 262150;
int A[KMAX];
int N, M;
int u, v, qmax, val, pos;
inline int maxim(int p, int q)
{
if(p > q)
return p;
return q;
}
void Update(int nod, int left, int right)
{
if(left == right)
A[nod] = val;
else
{
int m = (left + right) >> 1;
if(pos <= m)
Update(nod << 1, left, m);
if(pos > m)
Update((nod << 1) + 1, m + 1, right);
A[nod] = maxim(A[nod << 1], A[(nod << 1) + 1]);
}
}
void Query(int nod, int left, int right)
{
if(u <= left && right <= v)
if(qmax < A[nod])
qmax = A[nod];
else;
else
{
int m = (left + right) >> 1;
if(u <= m)
Query(nod << 1, left, m);
if(m < v)
Query((nod << 1) + 1, m + 1, right);
}
}
int main()
{
int i, c;
fin >> N >> M;
for(i = 1; i <= N; ++i)
{
fin >> val;
pos = i;
Update(1, 1, N);
}
for(i = 1; i <= M; ++i)
{
fin >> c >> u >> v;
if(!c)
{
qmax = -1;
Query(1, 1, N);
fout << qmax << '\n';
}
else
{
pos = u;
val = v;
Update(1, 1, N);
}
}
return 0;
}