Pagini recente » Cod sursa (job #759914) | Borderou de evaluare (job #1873165) | Cod sursa (job #1037296) | Cod sursa (job #2125153) | Cod sursa (job #2292908)
#include <fstream>
using namespace std;
int n, i, v[100001], a[400001], sol, x, y, t, m;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
void build(int nod, int st, int dr){
if(st == dr){
a[nod] = v[st];
return;
}
int mid = (st+dr)/2;
build(2*nod, st, mid);
build(2*nod+1, mid+1, dr);
a[nod] = max(a[2*nod], a[2*nod+1]);
}
void update(int nod, int st, int dr){
if(st == dr){
a[nod] = y;
return;
}
int mid = (st+dr)/2;
if(x <= mid)
update(2*nod, st, mid);
if(x > mid)
update(2*nod+1, mid+1, dr);
a[nod] = max(a[2*nod], a[2*nod+1]);
}
void query(int nod, int st, int dr){
if(x <= st && y >= dr){
sol = max(sol, a[nod]);
return;
}
int mid = (st+dr)/2;
if(x <= mid)
query(2*nod, st, mid);
if(y > mid)
query(2*nod+1, mid+1, dr);
}
int main(){
fin>>n>>m;
for(i=1;i<=n;i++)
fin>>v[i];
build(1, 1, n);
for(i=1;i<=m;i++){
fin>>t>>x>>y;
if(t == 0){
sol = -1;
query(1, 1, n);
fout<<sol<<"\n";
}
else
update(1, 1, n);
}
return 0;
}