Dang_Quan_10_Tin

NCS

Aug 12th, 2022 (edited)
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.78 KB | None | 0 0
  1. #define task "NCS"
  2. #include <iostream>
  3. #include <cstdio>
  4. #include <algorithm>
  5. #include <vector>
  6.  
  7. using namespace std;
  8.  
  9. using ll = long long;
  10. using ld = long double;
  11.  
  12. constexpr int N = 1e4 + 5;
  13. constexpr int mod = 123456789;
  14. int m, n;
  15. int a[N], b[N], dp[N], f[N];
  16. vector<int> s;
  17. vector<int> pos[N * 2];
  18.  
  19. void Read()
  20. {
  21.     cin >> m >> n;
  22.  
  23.     for (int i = 1; i <= m; ++i)
  24.     {
  25.         cin >> a[i];
  26.         s.emplace_back(a[i]);
  27.     }
  28.  
  29.     for (int i = 1; i <= n; ++i)
  30.     {
  31.         cin >> b[i];
  32.         s.emplace_back(b[i]);
  33.     }
  34. }
  35.  
  36. #define Find(x, v) (lower_bound(x.begin(), x.end(), v) - x.begin() + 1)
  37. void Compress()
  38. {
  39.     sort(s.begin(), s.end());
  40.     s.resize(unique(s.begin(), s.end()) - s.begin());
  41.  
  42.     for (int i = 1; i <= m; ++i)
  43.         a[i] = Find(s, a[i]);
  44.     for (int i = 1; i <= n; ++i)
  45.         b[i] = Find(s, b[i]);
  46. }
  47.  
  48. void Solve()
  49. {
  50.     for (int i = 1; i <= n; ++i)
  51.         pos[b[i]].emplace_back(i);
  52.  
  53.     dp[0] = 1;
  54.  
  55.     for (int i = 1; i <= m; ++i)
  56.     {
  57.         for (int j = 0; j <= n; ++j)
  58.         {
  59.             if (a[i] == b[j])
  60.                 f[j] = dp[j - 1];
  61.             else
  62.                 f[j] = dp[j];
  63.  
  64.             if (j)
  65.                 (dp[j] += dp[j - 1]) %= mod;
  66.         }
  67.  
  68.         for (int j = (int)pos[a[i]].size() - 1; j; --j)
  69.             (f[pos[a[i]][j]] -= f[pos[a[i]][j - 1]]) %= mod;
  70.  
  71.         swap(f, dp);
  72.     }
  73.  
  74.     int ans(0);
  75.  
  76.     for (int i = 1; i <= n; ++i)
  77.         (ans += dp[i]) %= mod;
  78.  
  79.     cout << (ans + mod) % mod;
  80. }
  81.  
  82. int32_t main()
  83. {
  84.     ios_base::sync_with_stdio(0);
  85.     cin.tie(0);
  86.     cout.tie(0);
  87.  
  88.     if (fopen(task ".INP", "r"))
  89.     {
  90.         freopen(task ".INP", "r", stdin);
  91.         freopen(task ".OUT", "w", stdout);
  92.     }
  93.  
  94.     Read();
  95.     Compress();
  96.     Solve();
  97. }
Advertisement
Add Comment
Please, Sign In to add comment