Advertisement
welleyth

RMI 2022 day 2 B

Oct 7th, 2022 (edited)
659
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.45 KB | None | 0 0
  1.  
  2.  
  3.  
  4. for(int i = 0; i < n; i++) cin » A[il; for(int i = 0; i < n; i++) cin »> B[il;
  5. -
  6. thers
  7. int prec[n/K+1][n/K+1];
  8. vector<int> AA[n/K+1];
  9. vector<int> BB[n/K+1];
  10. memset (prec, 0, sizeof prec); vector<int> v;
  11. {
  12. set<int> st[2][n/K+1];
  13. for(int i = 0; i < n; i++){
  14. st[0][i/K].insert(A[il): st[l][i/K].insert(B[il):
  15. }
  16. for(int i = 0; i < n/K;
  17. 1++) f
  18. AA[i] = vector<int>(st[0][i]. begin (),st[0][i].end ())
  19. BB[i] = vector<int (st[l|[il.begin(),st[1][i].end ())
  20. }
  21. set<int> st;
  22.  
  23. for(int i = 0; K * i < n; i++){
  24. for (int j = 0; K * j < n; j++){
  25. int p1 = K * i, p2 = K*j:
  26. int mxl = 0, mx2 = 0;
  27. st.clear () ;
  28. for(int t = p2; t < min(n,p2 + K); t++) {
  29. st.insert (B[t]);
  30. }
  31. V = vector<int>(st.begin(),st.end ()) ;
  32. for(int t = pl; t < min(n.pl + K); t++) {
  33. mx1 = max (mxl,A[t]);
  34. prec[i][jl = max(prec[i][jl,f(v,A[t]));
  35. }
  36. st.clear ();
  37. for(int t = pl; t < min(n,pl + K); t++){
  38. st.insert (A[t]);
  39. }
  40. V = vector<int>(st.begin () ,st.end ()) ;
  41. for(int t = p2; t < min(n,p2 + K); t++){
  42. mx2 = max (2, B[t]);
  43. prec[i][jl = max(prec[i|[jl,f(v, B[t])) ;
  44. }
  45. prec (1][jl = max (prec[i][jl, (mx1+mx2) 8M) ;
  46. T
  47. }
  48. }
  49.  
  50. while (q--){
  51. int a b,c,d;
  52. cin »> a >> b >> c >> d;
  53. G-
  54. b
  55. int block11 = a/K;
  56. int block12 = b/K
  57. int block21 = c/K;
  58. int block22 = d/K;
  59. int ans = 0;
  60. int MX1 = 0, MX2 =
  61. for(int i = a; i <= b; i++) MX1 = max(MX1,A[i])
  62. for(int
  63. i <= d: 1++) MX2 = max (MX2,B[1])
  64. [
  65. forint i = blockll+1; i <= block12-1;
  66. i++){
  67. for(int j = block21+1; j <= block22-1; j++){
  68. ans = max (ans,prec[i][il);
  69. cerr << "Segments ["
  70. <<i*K+1
  71. くく
  72. (i+1*K
  73. <<
  74. F
  75. -
  76. }
  77.  
  78. for(int i = a; i < min(b+1, (block11+1)*K); i++){
  79. MX1 = max (MX1,A[i]);
  80. 114
  81. 115
  82. =
  83. for(int j = c; j < min(d+1, (block21+1)*K); j++){
  84. 116
  85. int S = A[il + B[il;
  86. if (S >= M) S -= M;
  87. 117
  88. ans = max (ans, S);
  89. 118
  90. 119
  91. 120
  92. for(int j = max (c‚block22*K); j <= d; j++){
  93. 121
  94. int S = Alil + B[il;
  95. if (S >= M) S -= M;
  96. 122
  97. ans = max (ans, S);
  98. 123
  99. 124
  100. 125
  101. for(int i = block21+1; j <- block22-1; j++){
  102. MX2 = max (MX2, BB[jJ back());
  103. 126
  104. ans = max(ans, f(BB[i] ‚A[il));
  105. 127
  106. 128
  107. 129
  108. }
  109.  
  110. for(int i = max(a, block12*K); i <= b; i++){
  111. MX1 = max (MX1,A[i]);
  112. 132
  113. =
  114. 133
  115. for(int j = c; j < min(d+1, (block21+1)*K); j++){
  116. int S = Ali] + Blil;
  117. 134
  118. if(S >= M) S -= M;
  119. 135
  120. ans = max (ans,S);
  121. 136
  122. 137
  123. -
  124. }
  125. 138
  126. for(int j = max (c, block22*K); j <= d; j++){
  127. int S = Ali] + Blil;
  128. 139
  129. if (S >= M) S -= M:
  130. 140
  131. ans = max (ans,S) ;
  132. 141
  133. 142
  134. 143
  135. for(int j = block21+1; j == block22-1; j++){
  136. MX2 = max (MX2 , BB[i1 . back()) .
  137. 144
  138. ans = max (ans, f (BB [j1, A[il))
  139. 145
  140. 146
  141. 147
  142. }
  143. }
  144.  
  145. for (int j = c; j < min(d+1, (block21+1)*K) ; j++) {
  146. MX2 = max (MX2, B[j1);
  147. for(int i = a; i < min(b+1, (block11+1)*K); 1++){
  148. int S = Alil + B[il;
  149. if (S >= M) S - = M;
  150. ans = max (ans,S);
  151. =
  152. E
  153. UT AWN
  154. 6
  155. 7
  156. 8
  157. 9
  158. }
  159. for(int i = max(a, block12*K); i == b; i++){
  160. int S = Ali] + B[il;
  161. if (S >= M) S -= M;
  162. ans = max (ans,S);
  163. for (int i = blockll+1; j <= block12-1; j++){
  164. MX1 = max (MX1, AA[i].back ()) ;
  165. ans = max (ans, f(AA[il,B[jl));
  166. }
  167. }
  168.  
  169. for(int j = max (c,block22*K); j <= d; j++) {
  170. MX2 = max (MX2,B[jl);
  171. for (int i = a; i < min(b+1, (block11+1)*K); i++){
  172. int S = Alil + B[il
  173. if (S >= M) S -= M;
  174. ans = max (ans,S).
  175. for(int i = max(a, block12 K); i <- b; i++){
  176. int S = Ali] + BLjI:
  177. if (S >= M) S -= M;
  178. ans = max (ans, S);
  179. }
  180. E
  181. for(int i = blockll+1; j <= block12-1; j++){
  182. MX1 = max (MX1, AA[il.back() );
  183. ans = max (ans, f (AA[i], B[jl)
  184. }
  185. }
  186. ans = max (ans, (MX1+MX2)%M) -
  187. cout << ans <= "\n" :
  188.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement