Pagini recente » Cod sursa (job #987697) | Cod sursa (job #1204449) | Cod sursa (job #2968602) | Cod sursa (job #1708614) | Cod sursa (job #2988769)
#include <fstream>
using namespace std;
const int NMAX=100000,BKSize=1024;
int v[NMAX+3],bt[BKSize+3];
void update_max(int bk_ind) {
bt[bk_ind]=0;
int ind=bk_ind*BKSize;
for(int i=ind; i<ind+BKSize; i++)
bt[bk_ind]=max(bt[bk_ind],v[i]);
}
int maxxer(int a,int b){
int pr_bk_cmpl=(a+BKSize-1)/BKSize,ul_bk_cmpl=(b-BKSize+1)/BKSize+1,pr_bk_ind=pr_bk_cmpl*BKSize,ul_bk_ind=(ul_bk_cmpl+1)*BKSize-1,rez=0;
if(b-a+1>BKSize){
for(int i=a;i<pr_bk_ind;i++)
rez=max(rez,v[i]);
for(int i=pr_bk_cmpl;i<=ul_bk_cmpl;i++)
rez=max(rez,bt[i]);
for(int i=ul_bk_ind;i<=b;i++)
rez=max(rez,v[i]);
} else {
for(int i=a;i<=b;i++)
rez=max(rez,v[i]);
}
//cout<<pr_bk_cmpl<<" "<<pr_bk_ind<<" "<<ul_bk_cmpl<<" "<<ul_bk_ind<<"\n";
return rez;
}
int main() {
ifstream cin("arbint.in");
ofstream cout("arbint.out");
int n,q,op,a,b;
cin>>n>>q;
for(int i=0; i<n; i++) {
cin>>v[i];
bt[i/BKSize]=max(bt[i/BKSize],v[i]);
}
for(int i=0; i<q; i++) {
cin>>op;
if(op==1) {
cin>>a>>b;
a--;
if(v[a]==bt[a/BKSize]) {
v[a]=b;
update_max(a/BKSize);
} else {
v[a]=b;
bt[a/BKSize]=max(bt[a/BKSize],v[a]);
}
} else {
cin>>a>>b;
a--;
b--;
cout<<maxxer(a,b)<<"\n";
}
}
return 0;
}