哦对了,要大佬看ans为什么是负数肯定要附上代码
```cpp
#include <bits/stdc++.h>
#define N 200005
#define mod 19260817
int n,m;
long long int a[N],g[N],i,j,t,f[N],sum[N];
int main(){
scanf("%d%d",&n,&m);
g[1] = 0 , g[0] = 0, f[0] = 0;
for(i = 2;i <= n; i++){
scanf("%d",&t);
g[i] = (t + g[i - 1]) % mod;
}
for(i = 1;i <= n; i++){
scanf("%d",&a[i]);
f[i] = (f[i - 1] + a[i]) % mod;
sum[i] = (sum[i - 1] + (g[i] * a[i]) % mod) % mod;
}
for(i = 1;i <= m; i++){
int x,l,r,ans = 0;
scanf("%d%d%d",&x,&l,&r);
if(x >= l && x <= r)
ans = sum[r] - sum[x] - (g[x] * (f[r] - f[x - 1])) % mod + sum[l - 1]- sum[x - 1] + (g[x] * (f[x] - f[l - 1])) % mod;
else if(x < l)
ans = sum[r] - sum[l - 1] - (g[x] * (f[r] - f[l - 1])) % mod;
else
ans = (g[x] * (f[r] - f[l - 1])) % mod - (sum[r] - sum[l - 1]);
while(ans < 0)
ans += mod;
printf("%d\n",ans % mod);
}
return 0;
}
```
by xw001 @ 2017-10-22 17:30:20
加
if (ans<mod) ans+=mod;
by liangjialin @ 2017-10-22 18:37:07
负数取模还是负数, 所以 要 (ans % mod + mod) % mod
by Hzxleo4 @ 2017-10-22 19:19:37
![](https://cdn.luogu.com.cn/upload/pic/9396.png)
by 青衫白叙 @ 2017-10-22 20:05:52
@[liangjialin](/space/show?uid=30361) 不不不,你这都代码不行的,我写了个ans = (ans + mod) % mod 都还是负数,应该像你楼下那样写,(ans % mod + mod) % mod
by xw001 @ 2017-10-22 21:27:47
@[Hzxleo4](/space/show?uid=31619) 感谢大佬指点
by xw001 @ 2017-10-22 21:32:54
@[xw001](/space/show?uid=15044)
原来是写法不一样
wo cai buhui gaosu ni,wo wanquan ni de daima
by liangjialin @ 2017-10-25 07:52:44
wo cai buhui gaosu ni,wo wanquan 看ni de daima
by liangjialin @ 2017-10-25 07:55:55
wo cai buhui gaosu ni,wo wanquan not看ni de daima
by liangjialin @ 2017-10-25 07:56:55