Guest User

bit prob

a guest
Jun 25th, 2021
1,213
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.68 KB | None | 0 0
  1. #pragma GCC optimization "O2"
  2. #pragma GCC optimization "unroll-loop"
  3. #pragma GCC target ("avx2")
  4.  
  5. #include <bits/stdc++.h>
  6. #define ll int
  7. #define ld long double
  8. #define fs first
  9. #define sc second
  10. using namespace std;
  11. const ll N = 1e6 + 69;
  12. const ll Log2 = 20;
  13. const ll inf = 1e9 + 7;
  14. typedef pair<ll,ll> LL;
  15.  
  16. ll n,x,cnt[N],dp1[N][21],dp2[N][21],dp3[N][21];
  17.  
  18. bool bit(ll x,ll i){
  19.     return (x >> i) & 1;
  20. }
  21.  
  22. ll f1(ll mask,ll i){
  23.     if (mask >= N) return 0;
  24.     if (i < 0) return cnt[mask];
  25.     if (dp1[mask][i] != -1) return dp1[mask][i];
  26.     ll ans = f1(mask,i - 1);
  27.     if (bit(mask,i)) ans += f1(mask ^ (1 << i),i - 1);
  28.     return dp1[mask][i] = ans;
  29. }
  30.  
  31. ll f2(ll mask,ll i){
  32.     if (mask >= N) return 0;
  33.     if (i < 0) return cnt[mask];
  34.     if (dp2[mask][i] != -1) return dp2[mask][i];
  35.     ll ans = f2(mask,i - 1);
  36.     if (!bit(mask,i)) ans += f2(mask ^ (1 << i),i - 1);
  37.     return dp2[mask][i] = ans;
  38. }
  39.  
  40. ll f3(ll mask,ll i){
  41.     if (mask >= N) return 0;
  42.     if (i < 0) return cnt[mask];
  43.     if (dp3[mask][i] != -1) return dp3[mask][i];
  44.     ll ans = f3(mask ^ (1 << i),i - 1);
  45.     if (!bit(mask,i)) ans += f3(mask,i - 1);
  46.     return dp3[mask][i] = ans;
  47. }
  48.  
  49. ll a[N];
  50.  
  51. int main(){
  52.     ios_base::sync_with_stdio(0); cin.tie(0), cout.tie(0);
  53.     #define task "bruh"
  54.     if (fopen(task".inp", "r")){
  55.         freopen(task".inp", "r", stdin);
  56.         freopen(task".out", "w", stdout);
  57.     }
  58.     cin>>n;
  59.     for (ll i = 1;i <= n;i++) cin>>x,cnt[x]++,a[i] = x;
  60.     memset(dp1,-1,sizeof(dp1)); memset(dp2,-1,sizeof(dp2)); memset(dp3,-1,sizeof(dp3));
  61.     for (ll i = 1;i <= n;i++){
  62.         cout<<f1(a[i],20)<<" "<<f2(a[i],20)<<" "<<n - f3(a[i],20)<<"\n";
  63.     }
  64. }
  65.  
Advertisement
Add Comment
Please, Sign In to add comment