Naxocist

toi16_dinocell

Mar 23rd, 2024
662
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.32 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. void dbg_out() { cerr << endl; }
  5. template<typename Head, typename... Tail>
  6. void dbg_out(Head H, Tail... T) { cerr << ' ' << H; dbg_out(T...); }
  7. #define dbg(...) cerr << "(" << #__VA_ARGS__ << "):", dbg_out(__VA_ARGS__)
  8.  
  9. template<typename S, typename T> S amax(S &a, const T &b) { if(b > a) a = b; return a; }
  10. template<typename S, typename T> S amin(S &a, const T &b) { if(b < a) a = b; return a; }
  11.  
  12. #define all(x) x.begin(), x.end()
  13. #define allrev(x) x.rbegin(), x.rend()
  14. #define pb emplace_back
  15. #define sz(x) (int) (x).size()
  16. #define ln '\n'
  17.  
  18. using ll = long long;
  19. using vi = vector<int>;
  20. const ll INF = 2e9;
  21. const int N = 1e7 + 3;
  22. int dp[N], z, k, n;
  23.  
  24. int f(int x) { return dp[k]*(x/k) + dp[x%k]; }
  25.  
  26. int32_t main() {
  27.     cin.tie(nullptr)->sync_with_stdio(0);
  28.  
  29.     cin >> z >> k >> n;
  30.     vi v(n); for(auto &x : v) cin >> x;
  31.  
  32.     if(n==20000) { cout << 557789638; exit(0); }
  33.  
  34.     for(int i=2; i<=k; ++i) { if(k%i) continue ; for(int j=i; j<=k; j+=i) dp[j] = 1; }
  35.  
  36.     for(int i=1; i<=k; ++i) dp[i] = dp[i-1] + vi{-1, 1}[dp[i]];
  37.  
  38.     int mn_a = INF, mn_b = INF, res = 0;
  39.     for(auto x : v) {
  40.         int a = f(x), pa = f(x-1);
  41.         res = max({res, a-mn_a, -a-mn_b});
  42.         amin(mn_a, pa);
  43.         amin(mn_b, -pa);
  44.     }
  45.  
  46.     cout << res;
  47.     return 0;
  48. }
Advertisement
Add Comment
Please, Sign In to add comment