You are given an array $a_1,a_2,…,a_n$. All $a_i$ are pairwise distinct.

Let's define function $f(l,r)$ as follows:

  • let's define array $b_1,b_2,…,b_{r-l+1}$, where $b_i=a_{l-1+i}$;
  • sort array $b$ in increasing order;
  • result of the function $f(l,r)$ is $\sum\limits_{i=1}^{r-l+1}b_i\cdot i$.

Calculate $\Bigg(\sum\limits_{1\le l\le r\le n}f(l,r)\Bigg )mod(10^9+7)$, i.e. total sum of $f$ for all subsegments of $a$ modulo $10^9+7$.

可以得到$a_x$的贡献为

$\sum\limits_{\substack{a_i<a_x\\ i<x}} i\cdot (n-x+1)+\sum\limits_{\substack{a_i<a_x\\ i>x}}x\cdot (n-i+1)+x\cdot (n-x+1)$

#include <iostream>
#include <cstdio>
#include <algorithm>
#define REP(i,a,n) for(int i=a;i<=n;++i)
#define PER(i,a,n) for(int i=n;i>=a;--i)
using namespace std;
typedef long long ll; const int N = 1e6+10, P = 1e9+7;
int n, a[N], b[N];
ll c[N], cnt[N];
void add(int x, int v) {
for (; x<=n; x+=x&-x) c[x]+=v;
}
ll query(int x) {
ll r = 0;
for (; x; x^=x&-x) r+=c[x];
return r%P;
} int main() {
scanf("%d", &n);
REP(i,1,n) scanf("%d",a+i),b[i]=a[i];
sort(b+1,b+1+n);
REP(i,1,n) a[i]=lower_bound(b+1,b+1+n,a[i])-b;
REP(i,1,n) {
cnt[i] += query(a[i])*(n-i+1)%P;
add(a[i], i);
}
REP(i,1,n) cnt[i] += (ll)i*(n-i+1)%P, c[i] = 0;
PER(i,1,n) {
cnt[i] += query(a[i])*i%P;
add(a[i], (n-i+1));
}
ll ans = 0;
REP(i,1,n) ans+=cnt[i]*b[a[i]]%P;
printf("%lld\n", ans%P);
}

最新文章

  1. mongoose数据库连接和操作
  2. 【BZOJ-1076】奖励关 概率与期望 + 状态压缩DP
  3. UIWebView 操作
  4. BZOJ 3997 组合数学
  5. 配置NTP服务ntpd/ntp.conf(搭建Hadoop集群可参考)
  6. UVaLive 7267 Mysterious Antiques in Sackler Museum (if-else,枚举)
  7. Oracle中的delete和truncate的关系
  8. ios 字符串的操作汇总
  9. [学习OpenCV攻略][017][ARM9下移植OpenCV]
  10. Spring Bean初始化之后执行指定方法
  11. 【C语言编程练习】5.10寻找水仙数
  12. python中矩阵的用法
  13. IntersectionObserver API 使用教程
  14. classfication中使用图像金字塔和sliding windows提高准确率
  15. AES和RSA算法的demo代码
  16. Swagger Editor本地安装
  17. oracle批量删除某用户下的表
  18. VM虚拟机 安装linux系统
  19. 使用Akka构建集群(一)
  20. (原+译)使用numpy.savez保存字典后读取的问题

热门文章

  1. mysql数据库的索引
  2. django 快速实现文件上传(四)
  3. MongoDB系列一:MongoDB文档型数据库特点介绍
  4. JAVA之工作线程数究竟要设置多少
  5. git上传超过100m大文件
  6. [Javascript]客户端检测
  7. start-20180323
  8. VSCode查询快捷键对应功能技巧
  9. Android之SharedPreference存储数据
  10. Node安装配置