枚举二进制位k,考虑每个S(i,j) ≥ 2^k,用twopoint维护。复杂度o(nlogn)
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
typedef long long ll;
const int bitn = 36;
const int maxn = 1e5 + 5;
int N, A[maxn];
ll pre[maxn], bit[maxn];
ll solve () {
ll ans = 1LL * N * (N+1) / 2 * (N+1), sum;
for (int i = 1; i <= bitn; i++) {
int r = sum = 0;
for (int j = 1; j <= N; j++) {
while (r < N && sum < bit[i])
sum += A[++r];
if (sum < bit[i])