Pagini recente » Cod sursa (job #892314) | Cod sursa (job #2569749) | Cod sursa (job #1623247) | Cod sursa (job #165612) | Cod sursa (job #1242314)
#include <iostream>
#include <fstream>
#define DN 100013
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int n,m,v[DN],arb[4*DN];
int op,a,b,rez;
void read(){
f>>n>>m;
for(int i=1;i<=n;++i)
f>>v[i];
}
void build_arb(int nod,int left,int right){
if(left == right){
arb[nod] = v[left];
return;
}
int mij = (left+right)/2;
build_arb(2*nod,left,mij); ///Subarborele stang
build_arb(2*nod+1,mij+1,right); ///Subarborele drept
arb[nod] = max(arb[2*nod],arb[2*nod+1]);
}
void update(int nod,int left,int right){
if(left == right){
arb[nod] = b;
return;
}
int mij = (left+right)/2;
if( a <= mij )
update(2*nod,left,mij);
else
update(2*nod+1,mij+1,right);
arb[nod] = max(arb[2*nod],arb[2*nod+1]);
}
void fnd(int nod,int left,int right){
if(a <= left && right <= b){
rez=max(rez,arb[nod]);
return;
}
int mij = (left+right)/2;
if( a <= mij )
fnd(2*nod,left,mij);
if( b > mij)
fnd(2*nod+1,mij+1,right);
}
void solve(){
for(;m--;){
f>>op>>a>>b;
if(op == 1) /// v[a] = b;
update(1,1,n);
else{
rez = 0;
fnd(1,1,n);
g<<rez<<"\n";
}
}
}
int main()
{
read();
build_arb(1,1,n);
solve();
return 0;
}