#include<bits/stdc++.h>
using namespace std;
const int maxn=10005;
int n,a[maxn]={0};	//原数组 
int sum1[maxn]={0};	//D[1]+D[2]+D[3]……+D[n] 
int sum2[maxn]={0};	//1*D[1]+2*D[2]+……+n*D[n]

int lowbit(int x){return x&(-x);}
void update(int x,int k){
	int rec=x;
	while(x<=n){
		sum1[x]+=k;
		sum2[x]+=k*rec;
		x+=lowbit(x);
	}
} 
int getsum(int x){
	int rec=x,ans=0;
	while(x){
		ans+=(rec+1)*sum1[x]-sum2[x];
		x-=lowbit(x);
	}
	return ans;
}
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i];
		update(i,a[i]-a[i-1]);
	}
	update(1,10),update(3+1,-10);
	cout<<getsum(5)-getsum(1-1)<<endl;
	return 0;
}

 

分类: Algorithm

0 条评论

发表回复

Avatar placeholder

您的电子邮箱地址不会被公开。 必填项已用 * 标注