Mai intai trebuie sa te autentifici.
Cod sursa(job #2615495)
| Utilizator | Data | 14 mai 2020 17:54:34 | |
|---|---|---|---|
| Problema | Arbori de intervale | Scor | 0 |
| Compilator | cpp-64 | Status | done |
| Runda | Arhiva educationala | Marime | 1.15 kb |
#include <bits/stdc++.h>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int arbint[400010],a,x,n,i,poz,b,val,st,dr,maxi,m,op;
inline void query(int nod,int a,int b)
{
if(a>=st && b<=dr)
{
maxi=max(maxi,arbint[nod]);
return;
}
int mij=(a+b)/2;
if(st<=mij)
query(nod*2,a,mij);
else //if(mij<=dr)
query(nod*2+1,mij+1,b);
}
inline void update(int nod,int a,int b)
{
if(a==b)
{
arbint[nod]=val;
return;
}
int mij=(a+b)/2;
if(poz<=mij)
update(nod*2,a,mij);
else update(nod*2+1,mij+1,b);
arbint[nod]=max(arbint[nod*2],arbint[nod*2+1]);
}
int main()
{
fin>>n>>m;
for(i=1;i<=n;i++)
{
fin>>x;
val=x;
poz=i;
update(1,1,n);
}
for(i=1;i<=m;i++)
{
fin>>op>>a>>b;
if(op==0)
{
st=a;
dr=b;
maxi=0;
query(1,1,n);
fout<<maxi<<'\n';
}
else
{
val=b;
poz=a;
update(1,1,n);
}
}
return 0;
}
