pb_jiang

CF ROUND 1027G AC

May 28th, 2025
1,890
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.07 KB | None | 0 0
  1. // Problem: G. Build an Array
  2. // Contest: Codeforces - Codeforces Round  1027 (Div. 3)
  3. // URL: https://codeforces.com/contest/2114/problem/G
  4. // Memory Limit: 512 MB
  5. // Time Limit: 1000 ms
  6. //
  7. // Powered by CP Editor (https://cpeditor.org)
  8.  
  9. #include <assert.h>
  10. #include <bits/stdc++.h>
  11. using namespace std;
  12. #ifndef __DEBUG__
  13. #define dbg(...) 42
  14. #endif
  15. template <class T> using mpq = priority_queue<T, vector<T>, greater<T>>;
  16.  
  17. namespace rngs = std::ranges;
  18. using ll = long long;
  19. using a2l = array<ll, 2>;
  20. using pll = pair<ll, ll>;
  21. using vl = vector<ll>;
  22.  
  23. void solve()
  24. {
  25.     ll n, k;
  26.     cin >> n >> k;
  27.     vl a(n);
  28.     for (auto &x : a)
  29.         cin >> x;
  30.     auto lowbit = [](ll x) { return x & -x; };
  31.  
  32.     vl pref(n), suff(n);
  33.     // ll minv = n, maxv = lowbit(a.back());
  34.  
  35.     for (ll round = 0; round < 2; ++round) {
  36.         auto &acc = round == 0 ? pref : suff;
  37.  
  38.         for (ll i = 0; i < n; ++i) {
  39.             ll base = 0, delta = 0;
  40.             if (i > 0) {
  41.                 base = acc[i - 1] - lowbit(a[i - 1]);
  42.                 ll x = a[i - 1], y = a[i];
  43.                 if (x % y == 0 && lowbit(x / y) == x / y) {
  44.                     // delta = max(1ll, x / y / 2);
  45.                     // delta = max(1ll, x / y - 1);
  46.                     delta = max(1ll, lowbit(x) - lowbit(y * 2) + 1);
  47.                 } else {
  48.                     delta = lowbit(x);
  49.                 }
  50.             }
  51.  
  52.             // acc[i] = base + delta;
  53.             acc[i] = base + lowbit(a[i]) + delta;
  54.         }
  55.  
  56.         reverse(a.begin(), a.end());
  57.     }
  58.     rngs::reverse(suff);
  59.  
  60.     if (k < n) {
  61.         cout << "NO\n";
  62.         return;
  63.     }
  64.     dbg(pref, suff);
  65.  
  66.     for (ll i = 0; i < n; ++i) {
  67.         ll val = pref[i] + suff[i] - lowbit(a[i]);
  68.         dbg(val);
  69.         if (val >= k) {
  70.             cout << "YES\n";
  71.             return;
  72.         }
  73.     }
  74.     cout << "NO\n";
  75. }
  76.  
  77. int main(int argc, char **argv)
  78. {
  79.     std::ios::sync_with_stdio(false);
  80.     std::cin.tie(nullptr);
  81.  
  82.     ll t;
  83.     cin >> t;
  84.     while (t--)
  85.         solve();
  86.  
  87.     return 0;
  88. };
  89.  
Advertisement
Add Comment
Please, Sign In to add comment