Pagini recente » Cod sursa (job #2858718) | Cod sursa (job #3247549) | Cod sursa (job #449739) | Cod sursa (job #223367) | Cod sursa (job #2717095)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("arbint.in");
ofstream out("arbint.out");
int n,m,v[100005],sir[2000000],a,b,k1;
int build(int nod,int l,int r)
{
int mij=(l+r)/2;
if(l==r)return (sir[nod]=v[l]);
else return (sir[nod]=max(build(nod*2,l,mij),build(nod*2+1,mij+1,r)));
}
int maxim(int nod,int l,int r)
{
int mij=(l+r)/2;
if(a<=l && b>=r)return sir[nod];
if(b<l || a>r)return 0;
return max(maxim(nod*2,l,mij),maxim(nod*2+1,mij+1,r));
}
void schimba (int nod,int l,int r)
{
if(l<=a && a<=r)
{
int mij=(l+r)/2;
if(l==r){sir[nod]=b;return;}
schimba(nod*2,l,mij);
schimba(nod*2+1,mij+1,r);
sir[nod]=max(sir[nod*2],sir[nod*2+1]);
}
}
int main()
{
in>>n>>m;
for(int i=1;i<=n;i++)
{
in>>v[i];
}
build(1,1,n);
for(int i=1;i<=m;i++)
{
in>>k1>>a>>b;
if(!k1)
{
out<<maxim(1,1,n)<<'\n';
}
else schimba(1,1,n);
}
return 0;
}