Pagini recente » Cod sursa (job #572508) | Cod sursa (job #572356) | Cod sursa (job #2603276) | Cod sursa (job #1711583) | Cod sursa (job #2988748)
#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[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--;
if(b-a+1>=BKSize) {
int bk_ind=((a+BKSize-1)/BKSize)*BKSize,bk_ind1=((b-BKSize+1)/BKSize)*BKSize,rez=0,bk_st=bk_ind/BKSize,bk_dr=bk_ind1/BKSize;
for(int j=a; 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; j<=b; j++)
rez=max(rez,v[j]);
cout<<rez<<"\n";
}
}
}
return 0;
}