fork download
  1. #include <iostream>
  2. #include <vector>
  3. #include <algorithm>
  4. using namespace std;
  5. vector <int> tree;
  6. int merge(int a, int b) {
  7. return max(a, b);
  8. }
  9.  
  10. void build (int a[], int v, int l, int r){
  11. if(r-l==1){
  12. tree[v]=a[l];
  13. return;
  14. }
  15. int m=(l+r)/2;
  16. build (a,2*v+1, l , m);
  17. build (a,2*v+2, m , r);
  18. tree[v]=merge (tree[2*v+1],tree[2*v+2]);
  19. }
  20. long long get(int v, int l, int r, int ql,int qr){
  21. int E=0;
  22. if(ql<=l and qr>=r){
  23. return tree[v];
  24. }
  25. if (r<=ql or qr<=l){
  26. return E;
  27. }
  28. int m=(l+r)/2;
  29. return merge ( get(2*v+1, l , m , ql, qr),
  30. get(2*v+2, m , r, ql, qr));
  31. }
  32. void update (int v, int l, int r , int pos, long long val){
  33. if (r-l==1){
  34. tree[v]=val;
  35. return;
  36. }
  37. int m=(l+r)/2;
  38. if(pos<m){
  39. update (2*v+1, l,m , pos, val);
  40. }else {
  41. update (2*v+2, m , r, pos, val);
  42. }
  43. tree[v]=merge (tree[2*v+1],tree[2*v+2]);
  44. }
  45. int main() {
  46. int n;
  47. cin>>n;
  48. int a[n];
  49. for(int i=0; i<n; i++){
  50. cin>>a[i];
  51. }
  52. tree.resize(4*n);
  53. build(a,0,0,n);
  54. int k;
  55. cin>>k;
  56. while(k--){
  57. string q;
  58. cin>>q;
  59. if(q=="s"){
  60. int l,r;
  61. cin>>l>>r;
  62. cout<<get(0,0,n,l-1,r)<<endl;
  63. } else {
  64. int i,x;
  65. cin>>i>>x;
  66. update (0,0,n,i-1,x);
  67. }
  68. }
  69. }
Success #stdin #stdout 0s 5276KB
stdin
5
1 2 3 4 5
5
s 1 5
u 3 10
s 1 5
u 2 12
s 1 3
stdout
5
10
12