Pagini recente » Cod sursa (job #2649232) | Cod sursa (job #336887) | Cod sursa (job #2040861) | Cod sursa (job #2443914) | Cod sursa (job #713808)
Cod sursa(job #713808)
#include <cstdio>
#define nMax 100100
#define max(a,b) ((a>b)?a:b)
using namespace std;
int n;
int m;
int a[nMax * 4];
int val;
int pozitie;
int intervalStanga;
int intervalDreapta;
int maxim;
void interval (int nod, int st, int dr)
{
if (st >= intervalStanga && dr <= intervalDreapta){
maxim = max (maxim, a[nod]);
return;
}
int mij = (st + dr) >> 1;
if (intervalStanga <= mij){
interval (nod * 2, st, mij);
}
if (intervalDreapta > mij){
interval (nod * 2 + 1, mij + 1, dr);
}
}
void baga (int nod, int st, int dr)
{
if (st == dr){
a[nod] = val;
return ;
}
int mij = (st + dr) >> 1;
if (pozitie > mij){
baga (nod * 2 + 1, mij + 1, dr);
}else{
baga (nod * 2, st, mij);
}
a[nod] = max (a[nod * 2], a[nod * 2 + 1]);
}
void citire()
{
scanf ("%d %d", &n, &m);
for (int i = 1; i <= n; ++ i){
scanf ("%d", &val);
pozitie = i;
baga (1, 1, n);
}
}
void rez()
{
for (int i = 0; i < m; ++ i){
int caz;
int x;
int y;
scanf ("%d %d %d", &caz, &x, &y);
if (caz == 1){
val = y;
pozitie = x;
baga (1, 1, n);
}else{
maxim = -1;
intervalStanga = x;
intervalDreapta = y;
interval (1, 1, n);
printf ("%d\n", maxim);
}
}
}
int main()
{
freopen ("arbint.in", "r", stdin);
freopen ("arbint.out", "w", stdout);
citire();
rez();
return 0;
}