Advertisement
pb_jiang

T4 MLE

Jan 27th, 2024
766
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.17 KB | None | 0 0
  1. using ll = long long;
  2. class Solution {
  3. public:
  4.     int minOrAfterOperations(vector<int>& nums, int k) {
  5.         int n = nums.size();
  6.         vector<int> bc(32);
  7.         for (auto x: nums) {
  8.             for (int i = 0; i < 30; ++i)
  9.                 if ((1 << i) & x) bc[i]++;
  10.         }
  11.         int ans = 0;
  12.        
  13.         for (int i = 29; i >= 0 && k > 0; --i) {
  14.             if (nums.size() - bc[i] >= k) {
  15.                 vector<int> ns;
  16.                 for (int i = 0; i < nums.size();) {
  17.                     if (nums[i] & (1 << i)) {
  18.                         int j = i;
  19.                         int tmp = nums[i];
  20.                         while(j < nums.size() && (nums[j] & (1 << i) != 0)) ++j, tmp = tmp & nums[j];
  21.                         ns.push_back(tmp);
  22.                         i = j;
  23.                     } else {
  24.                         ns.push_back(nums[i]);
  25.                         ++i;
  26.                     }
  27.                 }
  28.                 vector<int> ns2;
  29.                 for (int i = 0; i < ns.size(); ++i) {
  30.                     if (ns[i] & (1 << i)) {
  31.                         if (i == 0) {
  32.                             ns[i+1] &= ns[i];
  33.                         } else if (i == ns.size() - 1) {
  34.                             ns2.back() &= ns[i];
  35.                         } else {
  36.                             int ov = ns2.back() & ns[i];
  37.                             int nv = ns[i] & ns[i + 1];
  38.                             if (ov < nv) {
  39.                                 ns2.back() &= ns[i];
  40.                             } else {
  41.                                 ns[i + 1] &= ns[i];
  42.                             }
  43.                         }
  44.                     } else {
  45.                         ns2.push_back(ns[i]);
  46.                     }
  47.                 }
  48.                 k -= nums.size() - bc[i];
  49.                 nums = ns2;
  50.                 bc = vector<int>(32);
  51.                 for (auto x: nums) {
  52.                     for (int i = 0; i < 30; ++i)
  53.                         if ((1 << i) & x) bc[i]++;
  54.                 }
  55.  
  56.             } else {
  57.                 break;
  58.             }
  59.         }
  60.         for (auto x: nums) ans |= x;
  61.         return ans;
  62.     }
  63. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement