Pagini recente » Cod sursa (job #3255928) | Cod sursa (job #2778850) | Cod sursa (job #133586) | Cod sursa (job #2291016) | Cod sursa (job #2224021)
#include <iostream>
#include <fstream>
using namespace std;
const int Maxx=4e5+66;
const int N=1e5+1;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
bool op;
int m,n,st,dr;
int A[N];
int aint[Maxx];
int poz,val,ans;
void upp(int node){
aint[node]=max(aint[2*node],aint[2*node+1]);
}
void build(int node,int left,int right){
if (left==right){
aint[node]=A[left];
return;
}
int mid=(left+right)/2;
build(2*node,left,mid);
build(2*node+1,mid+1,right);
upp(node);
}
void update(int node,int left,int right){
if (left==right){
aint[node]=val;
return;
}
int mid=(left+right)/2;
if (poz<=mid) update(2*node,left,mid);
else update(2*node+1,mid+1,right);
upp(node);
}
void querry(int node,int left,int right){
if (st<=left && right<=dr){
ans=max(ans,aint[node]);
return;
}
int mid=(left+right)/2;
if (st<=mid) querry(2*node,left,mid);
if (mid<dr) querry(2*node+1,mid+1,right);
}
int main() {
fin>>n>>m;
for (int i=1;i<=n;++i) fin>>A[i];
build(1,1,n);
for(;m--;){
fin>>op>>st>>dr;
if (!op){
ans=-1;
querry(1,1,n);
fout<<ans<<"\n";
continue;
}
poz=st;
val=dr;
update(1,1,n);
}
return 0;
}