1 条题解

  • 0
    @ 2026-5-3 20:22:30

    这里有两种解法:

    1. 我们可以计算前缀和((sum_i = a_1 + a_2 + \dots + a_i)),然后对每个询问 (q_i) 进行二分查找,找到满足 (sum_{j-1} < q_i) 且 (sum_j \ge q_i) 的结果 (j)。该解法的时间复杂度为 (O(n + m \cdot \log n))。

    2. 我们可以预先计算出每条蠕虫所属的堆的编号,然后对每个询问在 (O(1)) 时间内回答。该解法的时间复杂度为 (O(n + m))。

    #include <bits/stdc++.h>
    using namespace std;
    int main() {
        int n,s[100228]={0},m,a;
        cin>>n;for(int i = 1; i <= n; ++i){cin>>s[i];s[i]+=s[i-1];}
        cin>>m;while(m--){cin>>a;cout<<lower_bound(s,s+n,a)-s<<'\n';}
        return 0;
    }
    
    • 1

    信息

    ID
    6761
    时间
    1000ms
    内存
    256MiB
    难度
    9
    标签
    递交数
    2
    已通过
    1
    上传者