Cod sursa(job #2333825)
Utilizator | Data | 1 februarie 2019 23:25:54 | |
---|---|---|---|
Problema | Arbori de intervale | Scor | 100 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva educationala | Marime | 1.79 kb |
#include <fstream>
using namespace std;
ifstream cin("arbint.in");
ofstream cout("arbint.out");
const int N=100000+7;
int t[4*N];
void print(int v,int l,int r)
{
cout<<l<<" , "<<r<<" => "<<t[v]<<"\n";
if(l==r)
{
return;
}
else
{
int m=(l+r)>>1;
print(2*v,l,m);
print(2*v+1,m+1,r);
}
}
void upd(int v,int l,int r,int i,int x)
{
if(l==r)
{
t[v]=x;
}
else
{
int m=(l+r)>>1;
if(i<=m)
{
upd(2*v,l,m,i,x);
}
else
{
upd(2*v+1,m+1,r,i,x);
}
t[v]=max(t[2*v],t[2*v+1]);
}
}
int get(int v,int l,int r,int tl,int tr)
{
if(r<tl || tr<l)
{
return 0;
}
if(tl<=l && r<=tr)
{
return t[v];
}
int m=(l+r)>>1;
int res=max(get(2*v,l,m,tl,tr),get(2*v+1,m+1,r,tl,tr));
return res;
}
int main()
{
freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
int n,q;
cin>>n>>q;
for(int i=1;i<=n;i++)
{
int x;
cin>>x;
upd(1,1,n,i,x);
}
///print(1,1,n);
while(q--)
{
int k,a,b;
cin>>k>>a>>b;
if(k==0)
{
cout<<get(1,1,n,a,b)<<"\n";
}
else
{
upd(1,1,n,a,b);
}
}
return 0;
}