Pagini recente » Cod sursa (job #1861789) | Cod sursa (job #915872) | Cod sursa (job #930665) | Cod sursa (job #2873336) | Cod sursa (job #2392732)
#include <bits/stdc++.h>
using namespace std;
ifstream inf("arbint.in");
ofstream outf("arbint.out");
const int N=(1<<18);
int n, q, z;
int ai[N];
void upd(int ,int );
int getMax(int ,int ,int ,int ,int );
int main()
{
inf>>n>>q;
for(z=1;z<n; z*=2);
z--;
for(int i=1; i<=n; i++)
inf>>ai[z+i];
for(int j=z; j>=1; j--)
ai[j]=max(ai[2*j],ai[2*j+1]);
for(;q;q--)
{
int c, x, y;
inf>>c>>x>>y;
if(c==1)
upd(x,y);
else
outf<<getMax(1,1,z+1,x,y)<<'\n';
}
return 0;
}
void upd(int poz, int val)
{
poz+=z;
ai[poz]=val;
for(int i=poz/2; i>=1; i/=2)
ai[i]=max(ai[2*i],ai[2*i+1]);
}
int getMax(int ind, int lo, int hi, int st, int dr)
{
if(st<=lo&&hi<=dr)
return ai[ind];
else if(st>hi||dr<lo)
return 0;
return max(getMax(2*ind, lo, (hi+lo)/2,st, dr),getMax(2*ind+1, (lo+hi)/2+1, hi,st, dr));
}