为什么二分为wa两个点

~~~

#include<bits/stdc++.h>

using namespace std;

#define int long long

#define INF 0x3f3f3f3f3f3f3f3f

#define fi first

#define se second

#define all(_a) _a.begin(), _a.end()

typedef pair<int,int> PII;

const int N=1e6+10;

int n;

int sb[N],qz[N],hz[N],cnt[N];

deque<int> nb;

void solve(){

    cin>>n;

    for(int i=1;i<=n;i++) cin>>sb[i];

    for(int i=1;i<=n;i++) qz[i]=qz[i-1]+sb[i];

    for(int i=n;i>0;i--) hz[i]=hz[i+1]+sb[i];

    for(int i=1;i<=n;i++)

    {

        if(sb[i]>0) cnt[i]=cnt[i-1]+1;

        else cnt[i]=cnt[i-1];

    }

    if(qz[n]%3!=0)

    {

        cout<<0<<endl;

        return ;

    }

    int hh=qz[n]/3;

    int ans=0;

    for(int i=n;i>0;i--)

    {

        if(qz[i]==hh&&cnt[i]>0){

        int hh=upper_bound(nb.begin(),nb.end(),cnt[i])-nb.begin();

        ans+=nb.size()-hh;}

        if(cnt[n]-cnt[i-1]>0&&hz[i]==hh)

        {

            nb.push_front(cnt[i]);

        }

    }

    cout<<ans<<endl;

}

signed main(){

    ios::sync_with_stdio(false);

    cin.tie(nullptr), cout.tie(nullptr);

    int T;

    T=1;

    while(T--)solve();

    return 0;

}

~~~

全部评论

相关推荐

湫湫湫不会java:先投着吧,大概率找不到实习,没实习的时候再加个项目,然后把个人评价和荣誉奖项删了,赶紧成为八股战神吧,没实习没学历,秋招机会估计不多,把握机会。或者说秋招时间去冲实习,春招冲offer,但是压力会比较大
点赞 评论 收藏
分享
06-18 13:28
已编辑
门头沟学院 Web前端
爱睡觉的冰箱哥:《给予你300的工资》,阴的没边了
点赞 评论 收藏
分享
昨天 13:48
门头沟学院 C++
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务