题目描述
题目译自 Romanian Master of Informatics 2020 Day2 T2 「Sum Zero」
宇宙探险家 Roxy 遇到了一道棘手的数学难题,身为她最好的朋友,你必须帮她解决。
给定一个包含 N 个整数的数组 c1,c2,…,cN,以及 Q 个查询,每个查询包含一对左右端点 (Li,Ri),表示数组 cLi,cLi+1,…,cRi。
对于每个查询 (Li,Ri),你需要找出在这个子数组中,最多能选出多少个和为 0 的不相交子数组。两个子数组不相交是指它们没有共同的元素,但可以相邻。注意,子数组中的一些元素可能不属于任何选出的子数组。
输入格式
第一行包含一个整数 N。
第二行包含 N 个整数 c1,c2,…,cN。
第三行包含一个整数 Q,表示查询的数量。
接下来 Q 行,每行包含两个整数 Li 和 Ri,表示一个查询。
输出格式
输出 Q 行,每行输出一个整数,表示对应查询的答案。
样例
输入
10
1 2 -3 0 1 -4 3 2 -1 1
3
1 10
1 5
2 9
输出
4
2
2
数据范围与提示
对于所有输入数据,满足:
- 1≤N≤4⋅105
- 1≤Q≤4⋅105
- 对于所有 1≤i≤N,−109≤ci≤109
- 对于所有 1≤i≤Q,1≤Li≤Ri≤N
详细子任务附加限制及分值如下表所示。
子任务 |
分值 |
附加限制 |
1 |
22 |
1≤N≤5000;1≤Q≤5000 |
2 |
39 |
1≤N≤105;1≤Q≤105 |
3 |
无附加限制 |