class Solution {
public:
bool canSortArray(vector<int>& nums) {
int n = nums.size();
int pre_max = 0;
for (int i = 0; i < n;) {
int mx = 0;
int ones = __builtin_popcount(nums[i]);
while (i < n && __builtin_popcount(nums[i]) == ones) {
if (nums[i] < pre_max) {
return false;
}
mx = max(mx, nums[i++]);
}
pre_max = mx;
}
return true;
}
};