题意:
一段数字,分成三份 前一份与后一份的和必须相等, 问最大的值是多少?
维护一个前缀,然后在前缀里面二分寻找相等的就好了TAT
#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int MAXN = 2e5+10;
int arr[MAXN];
ll sum[MAXN];
int main() {
int n;
cin >> n;
sum[0] = 0;
for(int i = 1; i <= n; ++i) {
cin >> arr[i];
sum[i] = sum[i-1]+arr[i];
}
ll ans = 0, res = 0;
for(int i = n; i >= 1; --i) {
ans += arr[i];
int k = lower_bound(sum+1,sum+1+n,ans)-sum;
if(ans==sum[k] && i>k) {
res = max(res, ans);
//break;
}
}
cout << res << endl;
return 0;
}