Pagini recente » Cod sursa (job #1650286) | Cod sursa (job #2833436) | Cod sursa (job #1430115) | Cod sursa (job #2988739)
#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 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[BKSize],v[i]);
}
for(int i=0; i<q; i++) {
cin>>op;
if(op==1) {
cin>>a>>b;
if(v[a-1]==bt[a/BKSize]) {
v[a-1]=b;
update_max(a/BKSize);
} else
v[a-1]=b;
} else {
cin>>a>>b;
if(b-a+1>=BKSize) {
int bk_ind=((a+BKSize-1)/BKSize)*BKSize,bk_ind1=(b/BKSize)*BKSize,rez=0,bk_st=bk_ind/BKSize,bk_dr=bk_ind1/BKSize;
for(int j=a-1; j<bk_ind; j++)
rez=max(rez,v[j]);
for(int j=bk_st; j<=bk_dr; j++)
rez=max(rez,bt[j]);
for(int j=bk_ind1; j<=b; j++)
rez=max(rez,v[j]);
cout<<rez<<"\n";
} else {
int rez=0;
for(int j=a-1; j<b; j++)
rez=max(rez,v[j]);
cout<<rez<<"\n";
}
}
}
return 0;
}