I have been trying OR-thodox Distinction using nlogn approach but not getting AC. Please someone help
#include<bits/stdc++.h>
using namespace std;
#define tw() int t; cin>>t; while(t--)
#define ll long long
#define pb push_back
#define vi vector<int>
#define vl vector<ll>
#define all(x) x.begin(),x.end()
#define allcmp(x) x.begin(),x.end(),cmp
const int MOD = 1000000007;
vl bit(65),bit1,bit2;
void decToBinary(ll n)
{
ll i = 0;
while (n > 0) {
bit[i]+=(n % 2);
n = n / 2;
i++;
}
}
ll decrease1(ll n)
{
ll i = 0;
while (n > 0)
{
bit1[i] += (n % 2)==1 ? -1 : 0;
n = n / 2;
i++;
}
ll sum = 0;
for (ll i = 0; i < 65; i++)
{
if (bit1[i] > 0)
sum += pow(2, i);
}
return sum;
}
ll decrease2(ll n)
{
ll x = n;
ll i = 0;
while (n > 0)
{
bit2[i] += (n % 2)==1? -1 : 0;
n = n / 2;
i++;
}
ll sum = 0;
for (ll i = 0; i < 65; i++)
{
if (bit2[i] > 0)
sum += pow(2, i);
}
return sum;
}
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
tw(){ bool ok=true;
fill(all(bit), 0);
ll n;
cin >> n;
vl v(n);
ll sum = 0;
map<ll, ll> m;
int z = 0;
for (auto &x : v)
{
cin >> x;
m[x]++;
if (m[x] > 1)
ok = false;
}
for (auto x : v)
{
decToBinary(x);
}
ll sum1 = 0;
for (ll i = 0; i < 65; i++)
{
if (bit[i] > 0)
sum1 += pow(2, i);
}
m[sum1]++;
if (m[sum1] > 1)
ok = false;
bit1 = bit;
bit2 = bit;
for (int i = 0; i < n -1 && ok; i++)
{
ll x;
if (i > 0)
{
x = decrease1(v[i - 1]);
m[x]++;
if (m[x] > 1)
{
ok = false;
break;
}
}
}
for (int i = n - 1; i > 0 && ok; i--)
{
ll x;
if (i < n - 1)
{
x = decrease2(v[i + 1]);
m[x]++;
if (m[x] > 1)
{
ok = false;
break;
}
}
}
if(ok){cout<<"YES\n";}
else{cout<<"NO\n";}
}
return 0;}