二分找答案

Music Notes

https://ac.nowcoder.com/acm/problem/24866

二分找答案,用一个前缀和,不然会超时x
要注意的地方:
1.什么时候右边界收缩,什么时候左边界收缩。
2.找到答案时,l,r区间不存在,答案出现在l处,即r+1处。

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int a[50009];
long long sum[50009];
long long n , m , q;
bool check(int ans)
{
    long long temp = 0;
    /*for(int i = 1;i <= ans;i++)
    {
        temp += a[i];
        if(temp > q)break;
    }*/
    temp += sum [ans];
    return temp > q;
}
int main()
{

    cin>> n >> m;
    for(int i = 1;i <= n;i++)
        cin>>a[i],sum[i] = sum[i - 1] + a[i];
    while( m-- )
    {
        cin >> q;

        int l = 1,r = n, mid;
        while( l <= r )
        {
            mid = (l + r) >> 1;

            if( !check(mid) ) l = mid + 1;
            else r = mid - 1;

        }
        cout<< l << "\n";
    }
    return 0;
}
全部评论
大佬好强
点赞 回复 分享
发布于 2023-09-13 13:24 浙江

相关推荐

想要offer的牛油果很大方:老哥,你啥时候面的,有timeline吗
点赞 评论 收藏
分享
评论
3
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务