fork download
  1. #include <string.h>
  2. #include <stdio.h>
  3. #include <math.h>
  4.  
  5. int derevo(int i, int *a, int *mass, int l, int r) {
  6. if (l == r) {
  7. return mass[i] = a[l];
  8. }
  9. return mass[i] = fmax(derevo(2 * i + 1, a, mass, l, (l + r) / 2), derevo(2 * i + 2, a, mass, (l + r) / 2 + 1, r));
  10. }
  11.  
  12. int f(int i, int* mass, int nl, int nr, int l, int r) {
  13. if (nl == l && nr == r){
  14. return mass[i];
  15. }
  16. if (nl <= (l + r) / 2 && nr <= (l + r) / 2) {
  17. return f(2 * i + 1, mass, nl, nr, l, (l + r) / 2);
  18. }
  19. if (nl > (l + r) / 2 && nr > (l + r) / 2) {
  20. return f(2 * i + 2, mass, nl, nr, (l + r) / 2 + 1, r);
  21. }
  22. if (nl<= (l + r) / 2 && nr > (l + r) / 2) {
  23. return fmax(f(2 * i + 1, mass, nl, (l + r) / 2, l, (l + r) / 2),
  24. f(2 * i + 2, mass, (l + r) / 2+1, nr, (l + r) / 2 + 1, r));
  25. }
  26. }
  27.  
  28. int upd(int index, int znach, int l, int r, int *mass, int i){
  29. if (l == r) { return mass[i] = znach; }
  30. if (index <= (l + r) / 2) {
  31. return mass[i] = fmax(mass[i], upd(index, znach, l, (l + r) / 2, mass, 2 * i + 1));
  32. }
  33. return mass[i] = fmax(mass[i], upd(index, znach, (l + r) / 2+1, r, mass, 2 * i + 2));
  34. }
  35.  
  36. int main(){
  37. int n;
  38. scanf("%d", &n);
  39. int a[n];
  40. for (int i = 0; i < n; i++) {
  41. scanf("%i", &a[i]);
  42. }
  43. for (int i = 0; i < n; i++) {
  44. printf("%i ", a[i]);
  45. }
  46. int k;
  47. scanf("%d", &k);
  48. int* mass = (int*)malloc(4 * n * sizeof(int));
  49. derevo(0, a, mass, 0, n - 1);
  50. char ma[4]= "MAX";
  51. char up[4]= "UPD";
  52. for (int i = 0; i < k; i++) {
  53. char s[4];
  54. scanf("%s ", &s);
  55. int x, y;
  56. scanf("%d", &x);
  57. scanf("%d", &y);
  58. if (strcmp(s,ma) == 0) {
  59. printf("%d ", f(0, mass, x, y, 0, n - 1));
  60. }
  61. else {
  62. upd(x, y, 0, n-1, mass, 0);
  63. }
  64. }
  65. free(mass);
  66. return 0;
  67. }
Not running #stdin #stdout 0s 0KB
stdin
5
10 2 -5 8 7
4
MAX 0 4
MAX 1 3
UPD 2 12
MAX 1 3
stdout
Standard output is empty