Guest User

Untitled

a guest
Mar 21st, 2023
264
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.57 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define eb emplace_back
  4. #define ep emplace
  5. #define pub push_back
  6. #define pob pop_back
  7. #define puf push_front
  8. #define pof pop_front
  9. #define mt make_tuple
  10. #define fi first
  11. #define se second
  12. #define fastio ios::sync_with_stdio(false);cin.tie(NULL)
  13. #define rng_23 mt19937 rng(chrono::steady_clock::now().time_since_epoch().count())
  14. #ifdef LOCAL
  15. #include "debug.h"
  16. #else
  17. #define dbg1(args...) ;
  18. #define dbg2(x) ;
  19. #define stop ;
  20. #endif
  21. typedef long long LL;
  22. typedef pair<LL,int> pii;
  23. typedef tuple<int ,int , int > tiii;
  24. const LL INF=1e25;
  25. const LL MOD=1000000007;
  26.  
  27. std::ostream&
  28. operator<<( std::ostream& dest, __int128_t value )
  29. {
  30. std::ostream::sentry s( dest );
  31. if ( s ) {
  32. __uint128_t tmp = value < 0 ? -value : value;
  33. char buffer[ 128 ];
  34. char* d = std::end( buffer );
  35. do
  36. {
  37. -- d;
  38. *d = "0123456789"[ tmp % 10 ];
  39. tmp /= 10;
  40. } while ( tmp != 0 );
  41. if ( value < 0 ) {
  42. -- d;
  43. *d = '-';
  44. }
  45. int len = std::end( buffer ) - d;
  46. if ( dest.rdbuf()->sputn( d, len ) != len ) {
  47. dest.setstate( std::ios_base::badbit );
  48. }
  49. }
  50. return dest;
  51. }
  52.  
  53.  
  54. LL ara[1000000];
  55. void solve(int csno)
  56. {
  57. int n, k;
  58. LL m;
  59. cin >> n >> m >> k;
  60. for(int i = 0; i < n; i++ ){
  61. cin >> ara[i];
  62. }
  63.  
  64. sort(ara, ara + n);
  65.  
  66.  
  67.  
  68. vector<__int128_t> extra(1, 0), pref(1, 0);
  69. for(int i = 1; i < n; i++){
  70. if(ara[i] == ara[i - 1])
  71. extra.pub(ara[i]);
  72. }
  73.  
  74. for(int i = 1; i < extra.size(); i++)
  75. pref.pub(pref.back() + extra[i]);
  76.  
  77. k++;
  78.  
  79. __int128_t res = k<=pref.size()? pref[k - 1] : INF;
  80.  
  81. vector<pii> bubs;
  82. for(int i = 0; i < n; i++){
  83. if(bubs.empty() or bubs.back().fi != ara[i]){
  84. bubs.pub({ara[i], 1});
  85. }
  86. else
  87. bubs.back().se++;
  88. }
  89.  
  90. dbg2(bubs);
  91.  
  92. __int128_t sub = 0;
  93. LL g = 0;
  94. for(int i = 0; i < bubs.size(); i++){
  95. if(bubs[i].se < k){
  96. sub += (__int128_t)bubs[i].fi * bubs[i].se;
  97. g = __gcd(g, bubs[i].fi);
  98. k -= bubs[i].se;
  99. }
  100. else {
  101. sub += (__int128_t)min(bubs[i].se, k - 1) * bubs[i].fi;
  102.  
  103. LL mx = -INF;
  104. for(int j = i; j < bubs.size(); j++){
  105. mx = max(mx, __gcd(g, bubs[j].first) - bubs[j].first);
  106. }
  107. sub -= mx;
  108. break;
  109. }
  110. }
  111. dbg1(sub);
  112. res = min(res, sub);
  113.  
  114. __int128_t sum = 0;
  115. for(int i = 0; i < n; i++)
  116. sum += ara[i];
  117.  
  118. res = sum - res;
  119.  
  120. cout<<res<<"\n";
  121. }
  122. int main()
  123. {
  124. fastio;
  125. int T = 1;
  126. cin>>T;
  127. for(int csno = 1; csno <= T; csno++)
  128. solve(csno);
  129.  
  130. }
Advertisement
Add Comment
Please, Sign In to add comment