链接: https://www.nowcoder.com/acm/contest/82/B
来源:牛客网
给你一个长为n的序列a和一个常数k
有m次询问,每次查询一个区间[l,r]内所有数最少分成多少个连续段,使得每段的和都 <= k
如果这一次查询无解,输出"Chtholly"
输入描述:
第一行三个数n,m,k
第二行n个数表示这个序列a
之后m行,每行给出两个数l r表示一次询问
输出描述:
输出m行,每行一个整数,表示答案
示例1
输入
5 5 7
2 3 2 3 4
3 3
4 4
5 5
1 5
2 4
备注:
对于100%的数据,1 <= n , m <= 1000000 , 1 <= ai , k <= 1000000000
题解:利用倍增ST表,f[i][pos], 表示右端点为pos,分割2^i次可以到达的左端点。O(N)预处理出f[0][1-n], 然后nlogn得到
f[i][pos],然后每次利用倍增的思想,每个查询从高往下跳。
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include