Pagini recente » Cod sursa (job #3267753) | Cod sursa (job #2932296) | Cod sursa (job #1316978) | Cod sursa (job #2850345) | Cod sursa (job #2475308)
#include <bits/stdc++.h>
#define N_MAX 100001
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int N, M, arb[4*N_MAX];
void update(int valoare, int pozitie, int stanga = 1, int dreapta = N, int nod = 1)
{
if(stanga == dreapta)
{
arb[nod] = valoare;
return;
}
int mijloc = (stanga + dreapta) >> 1;
if(pozitie <= mijloc)
update(valoare, pozitie, stanga, mijloc, nod << 1);
else
update(valoare, pozitie, mijloc + 1, dreapta, (nod << 1) + 1);
arb[nod] = max(arb[nod << 1], arb[(nod << 1) + 1]);
}
int query(int a, int b, int stanga = 1, int dreapta = N, int nod = 1)
{
if(a <= stanga && dreapta <= b) return arb[nod];
int MAX = 0;
int mijloc = (stanga + dreapta) >> 1;
if(a <= mijloc) MAX = max(MAX, query(a, b, stanga, mijloc, nod << 1));
if(b > mijloc) MAX = max(MAX, query(a, b, mijloc + 1, dreapta, (nod << 1) + 1));
return MAX;
}
int main()
{
fin >> N >> M;
for(int x, i = 1; i <= N; ++i)
{
fin >> x;
update(x, i);
}
for(int q, a, b; M; --M)
{
fin >> q >> a >> b;
if(q)
update(b, a);
else
fout << query(a, b) << '\n';
}
}