Pagini recente » Cod sursa (job #117075) | Cod sursa (job #1128047) | Cod sursa (job #1900954) | Cod sursa (job #2049645) | Cod sursa (job #2273114)
#include<fstream>
#define N 100000
#define S 300
using namespace std;
ifstream cin("arbint.in");
ofstream cout("arbint.out");
int batog[N/S+1];
int v[N+1];
void update(int a, int b){
v[a] = b;
batog[a / S] = 0;
for(int i = (a / S) * S; i / S == a / S; i++)
batog[a / S] = max(batog[a / S], v[i]);
}
int querybat(int a, int b){
int ans = 0;
for(int i = a; i < b; i++)
ans = max(ans, batog[i]);
return ans;
}
int queryint(int a, int b){
int ans = 0;
for(int i = a; i < b; i++)
ans = max(ans, v[i]);
return ans;
}
int query(int a, int b){
if (a / S == b / S) return queryint(a, b + 1);
return max(queryint(a, (a / S + 1) * S), max(queryint((b / S) * b, b + 1), querybat(a / S + 1, b / S)));
}
int main(){
int n,m;
cin>>n>>m;
for(int i = 0; i < n; i++){
cin>>v[i];
batog[i / S] = max(batog[i / S], v[i]);
}
for(int i = 0; i < m; i++){
int op,a,b;
cin>>op>>a>>b;
if (op == 0) cout<<query(a - 1, b - 1)<<'\n';
else update(a - 1, b);
}
return 0;
}