Pagini recente » Cod sursa (job #2009410) | Cod sursa (job #46713) | Cod sursa (job #3198789) | Cod sursa (job #1113865) | Cod sursa (job #2701278)
#define NMAX 400016
#include <cstdio>
#include <algorithm>
using namespace std;
int n, q, T, a, b, p;
int AI[NMAX], V[NMAX/4];
void form_AI(int left, int right, int index)
{
if(left == right)
{
AI[index] = V[left];
return;
}
int mid = (left + right)/2;
form_AI(left, mid, 2*index);
form_AI(mid+1, right, 2*index+1);
AI[index] = max(AI[2*index], AI[2*index+1]);
}
void modify(int poz, int val)
{
int pozAI = p-n+poz-1;
AI[pozAI] = val;
for(int i = pozAI; i >= 1; i/=2)
AI[i] = max(AI[2*i], AI[2*i+1]);
}
int maxim(int left, int right, int index)
{
if(a <= left && right <= b)
return AI[index];
if(left > b || right < a)
return 0;
int mid = (left + right)/2;
int vms = maxim(left, mid, index*2);
int vmd = maxim(mid+1, right, index*2+1);
return max(vms, vmd);
}
void write()
{
for(int i = 1; i <= p; ++i)
printf("%d ", AI[i]);
}
void form_AI_I()
{
for(p = 1; p <= n; p<<=1);
p += n;
for(int i = p-n; i <= p; i++)
{
AI[i] = V[i-p+n+1];
}
for(int i = p-n-1; i >= 1; --i)
AI[i] = max(AI[2*i], AI[2*i+1]);
// write();
}
void read()
{
scanf("%d %d", &n, &q);
for(int i=1; i<=n; ++i)
{
scanf("%d", &V[i]);
}
form_AI_I();
}
void solve()
{
for(int i=1; i<=q; ++i)
{
scanf("%d %d %d", &T, &a, &b);
if(T == 1)
modify(a, b);
else printf("%d\n", maxim(1, p-n, 1));
}
}
int main()
{
freopen("arbint.in", "r", stdin);
freopen("arbint.out", "w", stdout);
read();
solve();
return 0;
}