func_code_string: #include <bits/stdc++.h>   const long long MAX_N = 2e5 + 100;   const long long MOD = 1e9 + 7;   using namespace std;   long long rm[MAX_N][20];   long long a[MAX_N];   map<int, int> last;   long long ans;   const long long c = (1ll << 50) - 1;   long long ask(long long l, long long r) {     long long len = r - l + 1;     int lg = (int)log2(len);     long long s = r - (1 << lg) + 1;     return (rm[l][lg] | rm[s][lg]);   }   bool check(long long i, long long j) {     j ^= c;     if (j & i) return true;     return false;   }   int main() {     long long n;     cin >> n;     ans = n * (n + 1) / 2;     for (int i = 1; i <= n; ++i) cin >> a[i], last[a[i]] = 0;     for (int i = 1; i <= n; ++i) rm[i][0] = a[i];     for (int i = 1; i < 20; ++i) {       for (int j = 1; j <= n - (1 << i) + 1; ++j) {         rm[j][i] = rm[j][i - 1] | rm[j + (1 << (i - 1))][i - 1];       }     }     for (int i = 1; i <= n; ++i) {       long long l1 = i;       long long r1 = last[a[i]] + 1;       long long l2 = i;       long long r2 = n;       if (!check(ask(r1, i), a[i]))         l1 = r1;       else {         while (l1 - r1 > 1) {           long long mid = (l1 + r1) / 2;           if (!check(ask(mid, i), a[i]))             l1 = mid;           else             r1 = mid;         }       }       if (!check(ask(i, n), a[i]))         l2 = n;       else {         while (r2 - l2 > 1) {           long long mid = (l2 + r2) / 2;           if (!check(ask(i, mid), a[i]))             l2 = mid;           else             r2 = mid;         }       }       ans -= (i - l1 + 1) * (l2 - i + 1);       last[a[i]] = i;     }     cout << ans;     return 0;   }   