前缀和:在输入同时获得结果.
s[i]=s[i-1]+input(a[i]).
区间和:前缀做差
Sum[A,B]=s[B]-s[A-1].
for(i=1,i<=n,i++){
input(a[i]);
s[i]=s[i-1]+input(a[i]).
input(a,b);
count=s[b]-s[a-1];
}

分解伪代码
S=a2*a1+a3*(a2+a1)+a4*(a3+a2+a1)+a5*(a4+a3+a2+a1) 因式分解复杂度on;
>>> func_(){
input(n);
lld sum, j=0;
for(i=0-> input(a[i]); sum+=j*a[i]; j+=a[i]; } return sum; } S=a1*(a2+a3+a4+a5)+a2*(a3+a4+a5)+a3*(a4+a5)+a4*a5 复杂度on; 前缀和: lld a[], s[]; func_(){ int i , n; lld sum=0; input(a[i]); for(i=0-> if i=0 ->s[i]=a[i]; else s[i]=s[i-1]+a[i] //前缀和数组 } for(i=0-> sum+=a[i]*(s[n-1]-s[i]); //末项-初项 } return sum; } acode
int main(){int n;scanf("%d",&n);long long sum = 0, j=0;for(int i=0;i