A83459.台阶前缀查询
普及/提高-
官方
通过率:0%
时间限制:1.00s
内存限制:128MB
题目描述
有一段台阶,共有 n 级,第 i 级台阶的高度为 ai。
接下来有 q 次询问。每次给出一个数 k,你需要:
- 从第 1 级台阶开始往上走,只要遇到的最高台阶高度不超过 k,就一直走;
- 设能走到的最远位置为第 i 级(若第 1 级的高度就大于 k,则 i=0),请输出从第 1 级到第 i 级所有台阶高度之和:∑j=1iaj。
等价地说:令前缀最大值数组 pi=max(a1,…,ai),前缀和 si=∑j=1iaj。
对每个询问的 k,找到最大的 i 使得 pi≤k,答案为 si(若不存在则输出 0)。
输入格式
第一行两个整数 n,q —— 台阶数与询问数。
第二行 n 个整数 a1,…,an。
第三行 q 个整数 k1,…,kq,分别为每个询问给出的 k。
输出格式
输出一行包含 q 个整数,第 i 个数是对 ki 的答案。数之间用空格分隔。
输入输出样例
输入#1
4 5 1 2 1 5 1 2 4 9 10
输出#1
1 4 4 9 9
说明/提示
1≤n,q≤2×105
1≤ai≤109
0≤ki≤109
对于样例:
前缀最大值为 [1,2,2,5],前缀和为 [1,3,4,9]。
- k=1:满足 pi≤1 的最大 i=1,输出 s1=1。
- k=2:最大 i=3,输出 s3=4。
- k=4:最大 i=3,输出 s3=4。
- k=9,10:最大 i=4,输出 s4=9。