P1818 饼干

题目描述

ly 在战场凹分,没吃午饭,饥肠辘辘的他从文具盒里翻出了一袋饼干......

这袋饼干有 n 块,分别称作第 1,2...n 块,第 i 块饼干能提供 w [i] 的饱腹感.

有强迫症的 ly 必须从第 1 块开始吃,然后第 2 块... 直到总饱腹感达到(大于或等于)s 时即停止.

众所周知,万事万物都会随着多种因素的变化而变化,当然 ly 的饱腹感上限 s 也不例外

于是 ly 会询问你 q 次:当他的饱腹感上限为 s [i] 时,他需要吃多少块饼干

输入描述

对于每个测试点,有三行输入

第一行,输入两个正整数 n, q (n, q <= 20'0000),n 表示饼干的数量,q 表示询问的次数.

第二行,输入 n 个正整数 w [i],(w [i] <= 1000) 表示第 i 块饼干的饱腹感.

第三行,输入 p 个正整数 s [i], (s [i] <= 2'0000'0000), 表示 ly 第 i 次询问时的饱腹感上限.

输出描述

仅一行:q 个正整数,第 i 个数表示 ly 第 i 次询问时需要吃的饼干数.

样例输入

Copy to Clipboard
5 3 3 7 9 5 4 5 2 19 

样例输出

Copy to Clipboard
2 1 3 

/*
 * @Description: To iterate is human, to recurse divine.
 * @Autor: Recursion
 * @Date: 2022-06-05 22:02:51
 * @LastEditTime: 2022-06-06 14:09:04
 */
#include <bits/stdc++.h>
#define LL long long 
using namespace std;
const int maxn = 1e6 + 10;
const int mod = 1e9 + 7;
const int INF = 1e9 + 10;
const int N = 1e6;

int n,q;
LL w[N];
LL s[N];
int sum[N];

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);

    cin >> n >> q;

    for(int i = 1;i <= n;i ++){
        cin >> w[i];
        sum[i] += sum[i - 1] + w[i];
    }

    while(q--){
        int x;
        cin >> x;
        int pos = lower_bound(sum + 1,sum + 1 + n,x) - sum - 1;

        cout << pos + 1  << " ";
    }

    return 0;
}

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值