A. Equator
Polycarp has created his own training plan to prepare for the programming contests. He will train for nn days, all days are numbered from 11 to nn, beginning from the first.
On the ii-th day Polycarp will necessarily solve aiai problems. One evening Polycarp plans to celebrate the equator. He will celebrate it on the first evening of such a day that from the beginning of the training and to this day inclusive he will solve half or more of all the problems.
Determine the index of day when Polycarp will celebrate the equator.
Input
The first line contains a single integer nn (1≤n≤2000001≤n≤200000) — the number of days to prepare for the programming contests.
The second line contains a sequence a1,a2,…,ana1,a2,…,an (1≤ai≤100001≤ai≤10000), where aiai equals to the number of problems, which Polycarp will solve on the ii-th day.
Output
Print the index of the day when Polycarp will celebrate the equator.
找一半,累加求和用upper_bound,注意奇数一半和偶数一半,upper_bound要减一
#include<bits/stdc++.h>
using namespace std;
int a[200005];
#define ll long long
ll sm;
ll s[200005];
int main()
{
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
int tmp;
scanf("%d",&tmp);
sm+=tmp;
s[i]=sm;
}
ll hf;
if(sm&1)hf=1+sm>>1;
else hf=sm>>1;
ll *p=upper_bound(s+1,s+1+n,hf);
int ans=p-s;
while(s[ans-1]>=hf)ans--;
printf("%d\n",ans);
return 0;
}
B.