Pagini recente » Cod sursa (job #2951483) | Cod sursa (job #147790) | Cod sursa (job #2286474) | Cod sursa (job #420938) | Cod sursa (job #2573353)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin ("arbint.in");
ofstream fout ("arbint.out");
int n,m,v[100010],cer,a,b;
int maxx;
pair< pair<int,int>,int>arb[500010];
void creare(int nod,int st,int dr)
{
int mij;
arb[nod].first.first=st;
arb[nod].first.second=dr;
if(st==dr)
arb[nod].second=v[st];
else
{
mij=(st+dr)/2;
creare(nod*2,st,mij);
creare(nod*2+1,mij+1,dr);
arb[nod].second=max(arb[nod*2].second,arb[nod*2+1].second);
}
}
void maxim(int nod)
{
int st=arb[nod].first.first;
int dr=arb[nod].first.second;
if(a<=st&&dr<=b)
maxx=max(maxx,arb[nod].second);
else
{
int mij=(st+dr)/2;
if(a<=mij) maxim(nod*2);
if(mij<b) maxim(nod*2+1);
}
}
void actualizare(int nod)
{
int st=arb[nod].first.first;
int dr=arb[nod].first.second;
if(st==dr)
arb[nod].second=b;
else
{
int mij=(st+dr)/2;
if(a<=mij) actualizare(nod*2);
else actualizare(nod*2+1);
arb[nod].second=max(arb[nod*2].second,arb[nod*2+1].second);
}
}
int main()
{
fin>>n>>m;
for(int i=1;i<=n;i++)
fin>>v[i];
creare(1,1,n);
for(;m;m--)
{
fin>>cer>>a>>b;
if(cer==0)
{
maxx=0;
maxim(1);
fout<<maxx<<'\n';
}
else
{
///v[a]=b;
actualizare(1);
}
}
return 0;
}