Pagini recente » Cod sursa (job #2103331) | Cod sursa (job #2836025) | Cod sursa (job #2572693) | Cod sursa (job #2011598) | Cod sursa (job #2637585)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int arb[262200];
int x[100001];
int n,m;
void construire(int node,int st,int dr)
{
if(st==dr)
arb[node]=x[st];
else
{
int mij=(st+dr)/2;
construire(node*2,st,mij);
construire(node*2+1,mij+1,dr);
arb[node]=max(arb[node*2],arb[node*2+1]);
}
}
int poz,val;
void update(int node,int st,int dr)
{
if(st==dr)
arb[node]=val;
else
{
int mij=(st+dr)/2;
if(poz<=mij)
update(node*2,st,mij);
else
update(node*2+1,mij+1,dr);
arb[node]=max(arb[node*2],arb[node*2+1]);
}
}
int a,b;
int getMax(int node,int st,int dr)
{
if(a<=st && dr<=b)
return arb[node];
else
{
int mij=(st+dr)/2;
int rez=-1;
if(a<=mij)
rez=getMax(node*2,st,mij);
if(mij+1<=b)
rez=max(getMax(node*2+1,mij+1,dr),rez);
return rez;
}
}
int main()
{
int tip;
f>>n>>m;
for(int i=1;i<=n;i++)
f>>x[i];
construire(1,1,n);
for(int i=1;i<=m;i++)
{
f>>tip;
if(tip==0)
{
f>>a>>b;
g<<getMax(1,1,n)<<'\n';
}
else
{
f>>poz>>val;
update(1,1,n);
}
}
f.close();
g.close();
return 0;
}