数据量在1e5,如果用
n
2
n^2
n2的复杂度,肯定是无法通过的,我们发现,每次i变换的时候j的值只能不变或者变大,那么我们就可以用双指针
#define _CRT_SECURE_NO_WARNINGS
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N = (int)2e5 + 5;
int a[N];
int b[N];
int n;
signed main() {
cin >> n;
int ans = 0;
for (int i = 1; i <= n; i++) scanf("%d", &a[i]), b[i] = b[i - 1] + a[i];
int j = 2;
for (int i = 1; i <= (n - 2); i++) {
while (j < n) {
int l = b[i], z = b[j] - b[i], r = b[n] - b[j];
if (l<z && z>r) break;
j++;
}
ans += (n - (j));
if (j == n) break;
}
cout << ans;
return 0;
}