Pagini recente » Cod sursa (job #632001) | Cod sursa (job #3151127) | Cod sursa (job #358391) | Cod sursa (job #818721) | Cod sursa (job #3159874)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
const int NAint=1<<19;
int n;
int aint[NAint];
void buildAint(int node=0, int st=1, int dr=n)
{
if(st==dr)
{
fin>>aint[node];
return;
}
int mij=(st+dr)/2;
buildAint(2*node+1, st, mij);
buildAint(2*node+2, mij+1, dr);
aint[node]=max(aint[2*node+1], aint[2*node+2]);
}
void updateAint(const int& pos, const int& newVal, int node=0, int st=1, int dr=n)
{
if(pos<st || dr<pos)
return;
if(st==dr)
{
aint[node]=newVal;
return;
}
int mij=(st+dr)/2;
updateAint(pos, newVal, 2*node+1, st, mij);
updateAint(pos, newVal, 2*node+2, mij+1, dr);
aint[node]=max(aint[2*node+1], aint[2*node+2]);
}
int queryAint(const int& qst, const int& qdr, int node=0, int st=1, int dr=n)
{
if(dr<qst || qdr<st)
return -1;
if(qst<=st && dr<=qdr)
return aint[node];
int mij=(st+dr)/2;
return max(queryAint(qst, qdr, 2*node+1, st, mij), queryAint(qst, qdr, 2*node+2, mij+1, dr));
}
int main()
{
int m;
fin>>n>>m;
buildAint();
for(int q=1; q<=m; q++)
{
int C,a,b;
fin>>C>>a>>b;
if(C==0)
{
fout<<queryAint(a, b)<<'\n';
}
else
{
updateAint(a, b);
}
}
return 0;
}