Pagini recente » Cod sursa (job #2300008) | Cod sursa (job #689916) | Cod sursa (job #1121938) | Cod sursa (job #2099362) | Cod sursa (job #2868931)
#include <fstream>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int const N=100000;
int aint[N*5],v[N];
int n,q,sz;
int constr(int node)
{
if(aint[node]!=-1 || node>sz*2)
return aint[node];
return aint[node]=max(constr(node*2),constr(node*2+1));
}
int maxx(int x,int y,int px,int py,int node)
{
if(py<x || px>y || node>sz*2 || px>py)
return 0;
if(px>=x && py<=y)
return aint[node];
int m=(px+py)/2;
return max(maxx(x,y,px,m,node*2),maxx(x,y,m+1,py,node*2+1));
}
void upd(int node)
{
if(node<=0)
return;
aint[node]=max(aint[node*2],aint[node*2+1]);
upd(node/2);
}
int main()
{
fin>>n>>q;
for(int i=1;i<=n;i++)
fin>>v[i];
for(sz=1;sz<n;sz*=2);
for(int i=1;i<=sz*2;i++)
aint[i]=-1;
for(int i=sz;i<=sz+n;i++)
aint[i]=v[i-sz+1];
for(int i=sz+n+1;i<=sz*2;i++)
aint[i]=0;
constr(1);
for(int i=1;i<=q;i++)
{
int k,x,y;
fin>>k>>x>>y;
if(k==0)
fout<<maxx(x,y,1,sz,1)<<"\n";
else
aint[sz+x-1]=y,upd((sz+x-1)/2);
}
}