Pagini recente » Cod sursa (job #334805) | Cod sursa (job #1962521) | Cod sursa (job #2576052) | Cod sursa (job #2367515) | Cod sursa (job #1844015)
#include <bits/stdc++.h>
using namespace std;
ifstream inf("arbint.in");
ofstream outf("arbint.out");
int n, m, z, aint[1<<18], i, a, b, c;
int querry(int, int, int );
int upd(int, int );
int main()
{
inf>>n>>m;
for(z=1; z<n; z*=2);
z--;
for(i=1; i<=n; i++)
inf>>aint[z+i];
for(i=z; i; i--)
aint[i]=max(aint[2*i], aint[2*i+1]);
for(; m; m--)
{
inf>>c>>a>>b;
if(c==0)outf<<querry(1,1,z+1)<<'\n';else upd(a,b);
}
return 0;
}
int querry(int nod, int st, int dr)
{
if(a<=st&&dr<=b)
return aint[nod];
if(a>dr||b<st)
return 0;
return max(querry(nod*2, st, (st+dr)/2), querry(nod*2+1, (st+dr)/2+1, dr));
}
int upd(int poz, int val)
{
poz+=z;
aint[poz]=val;
for(poz/=2; poz; poz/=2)
aint[poz]=max(aint[2*poz],aint[2*poz+1]);
return 0;
}