wuyouawa
2024-11-15 21:21:14
题目传送门
首先我们可以轻松发现区间积是
那么分开处理:
如果区间积是
如果区间积为
注意要用前缀和优化。
然后就做完了。
#include<bits/stdc++.h>
using namespace std;
int n,q,a[1000005],s[1000005],l,r,k;
int main()
{
scanf("%d%d",&n,&q);
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
s[i]=s[i-1]+a[i];
}
while(q--)
{
scanf("%d%d%d",&l,&r,&k);
if(s[r]-s[l-1]==r-l+1)//区间积为1
{
if(k>r-l) printf("-1\n");//特判
else if(r-l+1==k+1) printf("0\n");//可以
else printf("%d\n",abs(r-l+1-k));//否则输绝对值
}
else//区间积为0
{
if(k>r-l) printf("-1\n");//特判
else printf("%d\n",abs(s[r]-s[l-1]-k));//注意要绝对值
}
}
return 0;
}