交叉乘
时间限制:C/C++/Rust/Pascal 2秒,其他语言4秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

给出一个整数数组a_1,a_2,...,a_n,然后每次会给一对整数l,r,你需要算出

的值。
为了不输出过大的答案,假设答案为ans,请输出ans % 1,000,000,007。

提示:
在%1,000,000,007的意义下/2相当于*500,000,004
示例1

输入

复制
[1,2,5,3,4],[1,4,2,5,2,2]

返回值

复制
[41,71,0]

说明

第一个询问,l=1,r=4,ans=1*2+1*5+1*3+2*5+2*3+5*3=41;
第二个询问,l=2,r=5,ans=2*5+2*3+2*4+5*3+5*4+3*4=71;
第三个询问,l=2,r=2,ans=0。

备注:

参数a为vector<int>,依次为a1,a2,...,an;
参数query为vector<int>,依次为l1,r1,l2,r2,...,lq,rq;
n为数组a长度,q为询问次数。
30% 数据满足 1<=n,q<=1000
100% 数据满足 1<=n,q<=100000,1<=ai<=100000,1<=li<=ri<=n