Advertisement
Dang_Quan_10_Tin

LCD

Nov 3rd, 2021 (edited)
564
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #define task "LCD"
  2.  
  3. #include <iostream>
  4. #include <cstdio>
  5.  
  6. using namespace std;
  7.  
  8. using ll = long long;
  9. using ld = long double;
  10.  
  11. constexpr int N = 1e6 + 5;
  12. constexpr ll Inf = 1e17;
  13. int n, m;
  14. int a[N];
  15. ll b[N * 2];
  16.  
  17. void Read()
  18. {
  19.     cin >> n >> m;
  20.     for (int i = 1; i <= n; ++i)
  21.     {
  22.         cin >> a[i];
  23.         --a[i]; /// Change 1, 2, ..., m -> 0, 1, 2, ..., (m - 1)
  24.     }
  25. }
  26.  
  27. void Solve()
  28. {
  29.     ll sum(0); // Answer without X
  30.  
  31.     for (int i = 1; i < n; ++i)
  32.     {
  33.         if (a[i] > a[i + 1])
  34.             a[i + 1] += m;
  35.  
  36.         sum += a[i + 1] - a[i];
  37.  
  38.         b[a[i] + 2] += 1;
  39.         b[a[i + 1] + 1] += -1 - (a[i + 1] - a[i] - 1);
  40.         b[a[i + 1] + 2] += (a[i + 1] - a[i] - 1);
  41.  
  42.         if (a[i + 1] >= m)
  43.             a[i + 1] -= m;
  44.     }
  45.  
  46.     for (int i = 1; i < m * 2; ++i)
  47.         b[i] += b[i - 1];
  48.  
  49.     for (int i = 1; i < m * 2; ++i)
  50.         b[i] += b[i - 1];
  51.  
  52.     ll ans(Inf);
  53.  
  54.     for (int i = 0; i < m; ++i)
  55.         ans = min(ans, sum - b[i] - b[i + m]);
  56.  
  57.     cout << ans;
  58. }
  59.  
  60. int32_t main()
  61. {
  62.     ios::sync_with_stdio(0);
  63.     cin.tie(0);
  64.     cout.tie(0);
  65.     if (fopen(task ".INP", "r"))
  66.     {
  67.         freopen(task ".INP", "r", stdin);
  68.         freopen(task ".OUT", "w", stdout);
  69.     }
  70.     Read();
  71.     Solve();
  72. }
  73.  
  74. /*
  75. 4 5
  76. 1 2 4 5
  77. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement