考虑每个点的贡献,每个点能够成为联通区块的左端点的个数就是他能给答案带来的贡献
如果a[i-1]>a[i],那么根据乘法原理贡献为(a[i])*(a[i-1]-a[i])
如果a[i-1]<a[i],那么根据乘法原理贡献为(a[i]-a[i-1])*(n-a[i]+1)
#include<bits/stdc++.h> using namespace std; typedef long long ll; const int N=4e5+10; ll a[N]; int main(){ ios::sync_with_stdio(false); int n; cin>>n; int i; for(i=1;i<=n;i++){ cin>>a[i]; } ll ans=0; for(i=1;i<=n;i++){ if(a[i-1]<a[i]) ans+=(a[i]-a[i-1])*(n-a[i]+1); if(a[i-1]>a[i]) ans+=a[i]*(a[i-1]-a[i]); } cout<<ans<<endl; return 0; }