fork download
  1. #include <bits/stdc++.h>
  2. #define endl '\n';
  3. using namespace std;
  4. using ll = long long;
  5.  
  6. int n,q,b,x,y;
  7. int a[100005];
  8. int t[400005];
  9.  
  10. void build(int id, int l, int r){
  11. if(l == r) t[id] = a[l];
  12. else{
  13. int m = (l + r) / 2;
  14. build(id * 2, l, m);
  15. build(id * 2 + 1, m + 1, r);
  16. t[id] = max(t[id * 2], t[id * 2 + 1]);
  17. }
  18. }
  19.  
  20. void update(int id, int l, int r, int pos, int val){
  21. if(l == r){
  22. t[id] = val;
  23. a[pos] = val;
  24. return;
  25. }
  26. else{
  27. int m = (l + r) / 2;
  28. if(pos <= m){
  29. update(id * 2, l, m, pos, val);
  30. }
  31. else{
  32. update(id * 2 + 1, m + 1, r, pos, val);
  33. }
  34. t[id] = max(t[id * 2], t[id * 2 + 1]);
  35. }
  36. }
  37.  
  38. ll query(int id, int l, int r, int u, int v){
  39. if(v < l || r < u) return LLONG_MIN;
  40. if(u <= l && r <= v) return t[id];
  41. int m = (l + r) / 2;
  42. return max(query(id * 2, l , m, u, v), query(id * 2 + 1, m + 1, r, u , v));
  43. }
  44.  
  45. int main(){
  46. ios::sync_with_stdio(false);
  47. cin.tie(NULL);
  48. //freopen("MaxiSubArr.inp","r",stdin);
  49. //freopen("MaxiSubArr.out","w",stdout);
  50. cin >> n;
  51. for(int i = 1; i <= n; i++){
  52. cin >> a[i];
  53. }
  54. build(1,1,n);
  55. cin >> q;
  56. for(int i = 1; i <= q; i++){
  57. cin >> b >> x >> y;
  58. if(b == 1){
  59. update(1, 1, n, x, y);
  60. }
  61. else{
  62. cout << query(1, 1, n, x, y) << endl;
  63. }
  64. }
  65. return 0;
  66. }
  67.  
Success #stdin #stdout 0s 5320KB
stdin
5
1 4 2 3 5
6
2 1 3
1 3 3
2 1 5
2 3 5
1 2 3
2 2 4
stdout
4
5
5
3