题意

给一个数列\(a\),定义\(f(l,r)\)为\(b_1, b_2, \dots, b_{r - l + 1}\),\(b_i = a_{l - 1 + i}\),将\(b\)排序,\(f(l,r)\)=\(\sum\limits_{i = 1}^{r - l + 1}{b_i \cdot i}\)

计算\(\left(\sum\limits_{1 \le l \le r \le n}{f(l, r)}\right) \mod (10^9+7)\)

分析

考虑每个数字对答案的贡献,首先每个\(a_i\)的区间贡献为\((n-i+1)\times i\times a_i\)

在\(a_i\)左边的比它小的数\(a_j\)的贡献为\((n-i+1)\times j\times a_i\)

在\(a_i\)右边的比它小的数\(a_j\)的贡献为\(i\times (n-j+1)\times a_i\)

将所有贡献加起来即为答案

按排序后的下标建树状数组,维护原下标前缀和,边更新边加答案

Code

#include<bits/stdc++.h>
#define fi first
#define se second
#define bug cout<<"--------------"<<endl
using namespace std;
typedef long long ll;
const double PI=acos(-1.0);
const double eps=1e-6;
const int inf=1e9;
const ll llf=1e18;
const int mod=1e9+7;
const int maxn=5e5+10;
int n;
ll a[maxn],c[maxn],tr[maxn];
void add(int x,ll k){
while(x<=n){
tr[x]=(tr[x]+k)%mod;
x+=x&-x;
}
}
ll dor(int x){
ll ret=0;
while(x){
ret=(ret+tr[x])%mod;
x-=x&-x;
}
return ret;
}
ll ans=0;
void solve(){
memset(tr,0,sizeof(tr));
for(int i=1;i<=n;i++){
ll t=dor(a[i])*(n-i+1)%mod;
ans+=c[a[i]]*t%mod;
ans%=mod;
add(a[i],i);
}
}
int main(){
ios::sync_with_stdio(false);
//freopen("in","r",stdin);
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
ans+=a[i]*(n-i+1)%mod*i%mod;
ans%=mod;
c[i]=a[i];
}
sort(c+1,c+n+1);
for(int i=1;i<=n;i++){
a[i]=lower_bound(c+1,c+n+1,a[i])-c;
}
solve();
reverse(a+1,a+n+1);
solve();
cout<<ans<<endl;
return 0;
}

最新文章

  1. ABP源码分析二十三:Authorization
  2. asio制作使用ssl通信的证书
  3. How To Use API Online?
  4. java.lang.IllegalArgumentException
  5. Java核心 --- 注解
  6. 关于Thinkphp3.2版本的分页问题
  7. 解决set /p yn= 接受键盘输入导致ECHO 处于关闭状态的问题
  8. hdu 1384 Intervals
  9. 数值标记问题 离线+树状数组 HDU 3938 + HDU 3333
  10. h5开发app之在线生成二维码
  11. do while 循环和while循环的区别
  12. Asp.net Core2.0 缓存 MemoryCache 和 Redis
  13. 报表打印错误:Forcing NLS_NUMERIC_CHARACTERS to: &#39;.,&#39; for XDO processing
  14. VBS列出windows更新列表
  15. 仿9GAG制作过程(二)
  16. SQL Server跨服务器查询
  17. 《mongoDB》概念-数据类型
  18. GNU tar
  19. python---CRM用户关系管理
  20. MongoDB add sharding -- Just a note

热门文章

  1. T100——查询 r类 报表开发流程
  2. 命名规范 camel case, pascal case, hyphen
  3. 你懂什么是分布式系统吗?Redis分布式锁都不会?
  4. 进阶Java编程(13)反射与Annotation
  5. B2C电商平台开发心得(asp.net+bootstrap)
  6. C#进阶之WebAPI(一)
  7. 实现a标签按钮完全禁用
  8. O052、Create Volume 操作 (Part III)
  9. win DLL 笔记
  10. 深度:Hadoop对Spark五大维度正面比拼!