fork download
  1. #include <bits/stdc++.h>
  2. # define ll long long
  3. # define int ll
  4.  
  5. using namespace std;
  6.  
  7. void lich(char* in = NULL, char* out = NULL)
  8. {
  9. ios_base::sync_with_stdio(false), cin.tie(NULL), cout.tie(NULL);
  10.  
  11.  
  12. if (in)
  13. freopen(in, "r", stdin);
  14. if (out)
  15. freopen(out, "w", stdout);
  16.  
  17. }
  18.  
  19. int get_Freq_in_Range_L_R (int L , int R , int value,
  20. map <int,vector<int>> &mp) {
  21. return (upper_bound(mp[value].begin(),mp[value].end(),R)
  22. -lower_bound(mp[value].begin(),mp[value].end(),L));
  23. }
  24. map<int, vector<int>>mp;
  25.  
  26. void code() {
  27. int n, m;
  28. cin >> n >> m;
  29.  
  30. deque<int> v(m), p(n);
  31.  
  32. for (int i = 0;i < n;i++) {
  33. int x; cin >> x;
  34. mp[x].push_back(i);
  35. p[i] = x;
  36. }
  37. for (int i = 0;i < m;i++)
  38. cin >> v[i];
  39.  
  40. v.push_front(0);
  41. v.push_back(n);
  42. m+=2;
  43. int cnt = 0 , mx = 0;
  44. map<int, int> m2;
  45. for (int i = 0;i < m - 2;i++) {
  46. m2.clear();
  47. cnt = 0;
  48. for (int j = v[i]; j < v[i + 1];j++) {
  49. if (m2[p[j]]==0) {
  50. m2[p[j]]++;
  51. // cout << p[j] << " ";
  52. }
  53. else
  54. continue;
  55. // cout << v[i + 1] << " " << v[i + 2]<<" ";
  56. if (get_Freq_in_Range_L_R(v[i + 1], v[i + 2]-1 , p[j], mp)) {
  57. // cout << p[j] << " ";
  58. cnt++;
  59. }
  60. }
  61. mx = max(mx, cnt);
  62. }
  63. int cnt1 = 0;
  64.  
  65.  
  66. for (int i = 0;i < m - 1;i++) {
  67. set<int>st(p.begin() + v[i], p.begin() + v[i + 1]);
  68. cnt1 += st.size();
  69. }
  70.  
  71.  
  72. cout << cnt1 - mx;
  73. }
  74.  
  75.  
  76. signed main()
  77. {
  78. lich();
  79.  
  80. long long t = 1;
  81. // cin >> t;
  82.  
  83. while (t--)
  84. {
  85. code();
  86.  
  87. cout << (t ? "\n" : "");
  88. }
  89. }
Success #stdin #stdout 0.01s 5316KB
stdin
Standard input is empty
stdout
Standard output is empty