题目描述
现给定一个长为 n 的序列 a1∼an,其中 ai∈{0,1}。
q 次询问,每次给定 l,r,k,要你更改一些位置上的数值(只能改为 0 或 1)使得 i=l∑rai=k+i=l∏rai。也就是说要让 al∼ar 的和要恰好等于 al∼ar 的乘积再加上 k。你需要求出最少的修改次数。如果无解,输出 −1。
请注意每次的更改不会对后续询问产生影响。
输入格式
第一行输入 n,q。
接下来一行 n 个整数 a1∼an。
接下来 q 行,每行三个整数 l,r,k。
输出格式
输出 q 行,每行一个整数表示最少的修改次数。如果无解请输出 -1。
5 4
0 0 1 0 1
1 3 2
2 4 0
3 5 2
1 1 1
1
1
0
-1
8 3
1 1 1 1 1 1 1 1
2 6 2
5 8 2
1 8 7
3
2
0
提示
样例 #1 解释
a={0,0,1,0,1}。
第一个询问只需将 a1 或 a2 改为 1。此时和为 2,积为 0。
第二个询问只需将 a3 改为 0。此时和为 0,积为 0。
第三个询问不需进行更改,和为 2,积为 0。
第四个询问,因为只有一个数,所以和与积相等,所以不可能做到。
数据范围
对于 100% 数据,1≤n,q≤106,0≤k≤106,1≤l≤r≤n,ai∈{0,1}。
| Subtask 编号 |
n,q≤ |
特殊性质 |
分值 |
| 0 |
10 |
无 |
10 |
| 1 |
103 |
A |
7 |
| 2 |
BC |
| 3 |
B |
13 |
| 4 |
C |
| 5 |
无 |
20 |
| 6 |
105 |
B |
9 |
| 7 |
C |
| 8 |
106 |
无 |
12 |
特殊性质 A:k=n。
特殊性质 B:∀1≤i≤n,ai=0。
特殊性质 C:k=0。