1 条题解
-
0
这里有两种解法:
-
我们可以计算前缀和((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))。
-
我们可以预先计算出每条蠕虫所属的堆的编号,然后对每个询问在 (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
- 上传者