转换条件:lowbit(a[i]+a[j])==a[i]+a[j] 转换为 a[i]+a[j]=2^k,
第一个for按顺序枚举a[i],然后第二个for枚举k的所有情况,两层循环中找a[j](即a[i]-2^k)的个数即可
代码展示:
#include<bits/stdc++.h>
#define int long long
using namespace std;int a[100010];
un…
// 下沉调整函数
void sift_down(vector<int>& arr, int i, int n) {while (i < n) {int largest = i; // 当前节点int left = 2 * i + 1; // 左子节点int right = 2 * i + 2;// 右子节点// 找到左右子节点中的较大者if (left < n && arr[left] &…