Advertisement
bibaboba12345

Untitled

Sep 5th, 2021
139
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.06 KB | None | 0 0
  1. Node Merge(Node l, Node r) {
  2. Node ans;
  3. if (l.isEmpty) {
  4. return r;
  5. }
  6. if (r.isEmpty) {
  7. return l;
  8. }
  9. ans.len = l.len + r.len;
  10. ans.lval = l.lval;
  11. ans.rval = r.rval;
  12. ans.mid = 0;
  13. ans.isEmpty = 0;
  14. ans.isNeub = 0;
  15. if (r.lval >= l.rval) { // стыковка
  16. if (l.isNeub) {
  17. if (r.isNeub) {
  18. ans.isNeub = 1;
  19. return ans;
  20. }
  21. else {
  22. ans.L = l.len + r.L;
  23. ans.mid = r.mid;
  24. ans.R = r.R;
  25. return ans;
  26. }
  27. }
  28. if (r.isNeub) {
  29. if (l.isNeub) {
  30. ans.L = 0;
  31. ans.R = 0;
  32. ans.isNeub = 1;
  33. return ans;
  34. }
  35. else {
  36. ans.R = l.R + r.len;
  37. ans.mid = l.mid;
  38. ans.L = l.L;
  39. return ans;
  40. }
  41. }
  42. ans.L = l.L;
  43. ans.R = r.R;
  44. ans.mid = ((l.R + r.L) * (l.R + r.L + 1)) / 2 + l.mid + r.mid;
  45. return ans;
  46. }
  47. else { // нестыковка
  48. if (l.isNeub) {
  49. if (r.isNeub) {
  50. ans.L = l.len;
  51. ans.R = r.len;
  52. ans.mid = 0;
  53. return ans;
  54. }
  55. else {
  56. ans.L = l.len;
  57. ans.mid = ((r.L) * (r.L + 1)) / 2 + r.mid;
  58. ans.R = r.R;
  59. return ans;
  60. }
  61. }
  62. if (r.isNeub) {
  63. if (l.isNeub) {
  64. ans.L = l.len;
  65. ans.R = r.len;
  66. ans.mid = 0;
  67. return ans;
  68. }
  69. else {
  70. ans.L = l.L;
  71. ans.mid = (l.R * (l.R + 1)) / 2 + l.mid;
  72. ans.R = r.len;
  73. return ans;
  74. }
  75. }
  76. ans.L = l.L;
  77. ans.R = r.R;
  78. ans.mid = (l.R * (l.R + 1)) / 2 + ((r.L) * (r.L + 1)) / 2 + l.mid + r.mid;
  79. return ans;
  80. }
  81. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement