1. 程式人生 > >CF1006C 【Three Parts of the Array】

CF1006C 【Three Parts of the Array】

const iostream ont ron array 前綴 code 更新 sin

二分查找水題

記$sum[i]$為$d[i]$的前綴和數組

枚舉第一段區間的結尾$i$

然後二分出$lower$_$bound(sum[n]-sum[i])$的位置$x$,如果$sum[x]$與$sum[n]-sum[i]$相等,且$x$大於$i$,更新答案

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn=2e5+10;
int n;
long long sum[maxn],ans;
int main()
{
    scanf(
"%d",&n); for(int x,i=1;i<=n;i++) { scanf("%d",&x); sum[i]=sum[i-1]+x; } for(int i=1;i<=n;i++) if(sum[i]<=sum[n]/2) { int x=lower_bound(sum+1,sum+n+1,sum[n]-sum[i])-sum; if(x>=i&&sum[x]==sum[n]-sum[i]) ans
=sum[i]; } printf("%lld\n",ans); return 0; }

CF1006C 【Three Parts of the Array】