func_code_string: #include <bits/stdc++.h>   using namespace std;   int n, nxt[200010], a[200010], sz[200010][31];   long long ans = 0;   map<int, int> mp;   inline char gc() {     static char *S, *T, buf[1 << 16];     if (T == S) {       T = (S = buf) + fread(buf, 1, 1 << 16, stdin);       if (T == S) return EOF;     }     return *S++;   }   inline int read() {     int x = 0, f = 1;     char ch = gc();     while (ch <  0  || ch >  9 ) {       if (ch ==  - ) f = -1;       ch = gc();     }     while ( 0  <= ch && ch <=  9 ) x = x * 10 + ch -  0 , ch = gc();     return x * f;   }   inline int check(int l, int r) {     int res = 0;     for (int i = 0; i <= 30; ++i) res |= ((sz[r][i] - sz[l - 1][i]) > 0) << i;     return res;   }   int main() {     n = read();     for (int i = 1; i <= n; ++i) {       a[i] = read(), nxt[i] = mp[a[i]], mp[a[i]] = i;       for (int j = 0; j <= 30; ++j) {         sz[i][j] = sz[i - 1][j];         if (a[i] & (1 << j)) sz[i][j]++;       }     }     for (int i = 1; i <= n; ++i) {       int l = max(nxt[i] + 1, 1), r = i, nowl = i;       while (l <= r) {         int mid = l + r >> 1;         if (check(mid, i) == a[i])           nowl = mid, r = mid - 1;         else           l = mid + 1;       }       l = i, r = n;       int nowr = i;       while (l <= r) {         int mid = l + r >> 1;         if (check(i, mid) == a[i])           nowr = mid, l = mid + 1;         else           r = mid - 1;       }       ans += 1ll * (i - nowl + 1) * (nowr - i + 1);     }     printf( %I64d n , 1ll * n * (n + 1) / 2 - ans);     return 0;   }   