Advertisement
Guest User

Untitled

a guest
Dec 15th, 2019
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.80 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int query(int* tree, int l, int r, int a, int b, int i);
  5.  
  6. int max(int x, int y);
  7.  
  8. void build(int* arr, int i, int a, int b, int* tree);
  9.  
  10. void update(int i, int v, int val, int a, int b, int* tree);
  11.  
  12.  
  13. int max(int x, int y){
  14. return (y>x) ? y : x;
  15. }
  16.  
  17. void build(int* arr, int i, int a, int b, int* tree){
  18. if (a==b) tree[i]=arr[a];
  19. else{
  20. int m=a+(b-a)/2;
  21. build(arr, 2*i+1, a, m, tree);
  22. build(arr, 2*i+2, m+1, b, tree);
  23. tree[i]=max(tree[2*i+1], tree[2*i+2]);
  24. }
  25. }
  26.  
  27. void update(int i, int v, int val, int a, int b, int* tree){
  28. if (a==b) tree[v]=val;
  29. else {
  30. int m=a+(b-a)/2;
  31. if (i<=m) update(i, 2*v+1, val, a, m, tree);
  32. else update(i, 2*v+2, val, m+1, b, tree);
  33. tree[v]=max(tree[2*v+1], tree[2*v+2]);
  34. }
  35. }
  36.  
  37. int query(int* tree, int l, int r, int a, int b, int i){
  38. if ((l==a) && (r==b)) return tree[i];
  39. else {
  40. int m=a+(b-a)/2;
  41. if (r<=m) return query(tree, l, r, a, m, 2*i+1);
  42. else{
  43. if (l>m) return query(tree, l, r, m+1, b, 2*i+2);
  44. else return max(query(tree, l, m, a, m, 2*i+1), query(tree, m+1, r, m+1, b, 2*i+2));
  45. }
  46. }
  47. }
  48.  
  49. int main(int argc, char** argv){
  50. int n, k, x, y;
  51. char str[3];
  52. scanf("%d", &n);
  53. int* arr=(int*)malloc(n*sizeof(int));
  54. for (int i=0; i<n; i++) scanf("%d", &arr[i]);
  55. int* tree=(int*)malloc(4*n*sizeof(int));
  56. build(arr, 0, 0, n-1, tree);
  57. scanf("%d", &k);
  58. for (int i=0; i<k; i++){
  59. for (int j=0;j<3; j++) scanf(" %c", &str[j]);
  60. scanf("%d%d", &x, &y);
  61. if (str[0]==77) printf("%d\n", query(tree, x, y, 0, n-1, 0));
  62. else update(x,0, y, 0, n-1, tree);
  63. }
  64. free(arr);
  65. free(tree);
  66. return 0;
  67. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement