fork download
  1. /*
  2. * @Author: hungeazy
  3. * @Date: 2026-03-04 23:24:15
  4. * @Last Modified by: hungeazy
  5. * @Last Modified time: 2026-04-06 21:33:05
  6. */
  7. #include <bits/stdc++.h>
  8. using namespace std;
  9. #define int long long
  10. const int N = (int)1e6+10;
  11. int n,m,A[N],B[N];
  12.  
  13. void sub1()
  14. {
  15. vector<int> vec;
  16. int ans = 0;
  17. for (int i = 1; i <= n; i++)
  18. {
  19. if (vec.empty())
  20. vec.push_back(A[i]);
  21. else if (A[i] >= vec.back())
  22. vec.push_back(A[i]);
  23. vector<int> vec2;
  24. for (int j = m; j >= 1; j--)
  25. {
  26. if (vec2.empty())
  27. vec2.push_back(B[j]);
  28. else if (B[j] <= vec2.back())
  29. vec2.push_back(B[j]);
  30. if (vec2.back() >= vec.back())
  31. {
  32. int len = vec.size()+vec2.size();
  33. ans = max(ans,len);
  34. }
  35. }
  36. }
  37. cout << ans;
  38. }
  39.  
  40. void sub2()
  41. {
  42. int left = n, right = 1;
  43. for (int i = 2; i <= n; i++)
  44. if (A[i] < A[i-1])
  45. {
  46. left = i-1;
  47. break;
  48. }
  49. for (int i = m-1; i >= 1; i--)
  50. if (B[i] > B[i+1])
  51. {
  52. right = i+1;
  53. break;
  54. }
  55. int ans = 0;
  56. bool check = false;
  57. for (int i = 1; i <= left; i++)
  58. {
  59. while (A[i] > B[right])
  60. {
  61. right++;
  62. if (right > m)
  63. {
  64. check = true;
  65. break;
  66. }
  67. }
  68. if (check) break;
  69. ans = max(ans,i+(m-right+1));
  70. }
  71. cout << ans;
  72. }
  73.  
  74. signed main()
  75. {
  76. ios_base::sync_with_stdio(false);
  77. cin.tie(NULL); cout.tie(NULL);
  78. cin >> n;
  79. for (int i = 1; i <= n; i++) cin >> A[i];
  80. cin >> m;
  81. for (int i = 1; i <= m; i++) cin >> B[i];
  82. // if (n <= 5e3 and m <= 5e3) sub1();
  83. sub2();
  84. return 0;
  85. }
Success #stdin #stdout 0.01s 5320KB
stdin
Standard input is empty
stdout
Standard output is empty