Scalar Queries CodeForces - 1167F (计数,树状数组)
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);
}
Scalar Queries CodeForces - 1167F (计数,树状数组)的更多相关文章
- Sereja and Brackets CodeForces - 380C (树状数组+离线)
Sereja and Brackets 题目链接: CodeForces - 380C Sereja has a bracket sequence s1, s2, ..., *s**n, or, in ...
- codeforces 597C (树状数组+DP)
题目链接:http://codeforces.com/contest/597/problem/C 思路:dp[i][j]表示长度为i,以j结尾的上升子序列,则有dp[i][j]= ∑dp[i-1][k ...
- Codeforces 597C. Subsequences (树状数组+dp)
题目链接:http://codeforces.com/contest/597/problem/C 给你n和数(1~n各不同),问你长为k+1的上升自序列有多少. dp[i][j] 表示末尾数字为i 长 ...
- HDU 6348 序列计数 (树状数组 + DP)
序列计数 Time Limit: 4500/4000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total Subm ...
- gym 100589A queries on the Tree 树状数组 + 分块
题目传送门 题目大意: 给定一颗根节点为1的树,有两种操作,第一种操作是将与根节点距离为L的节点权值全部加上val,第二个操作是查询以x为根节点的子树的权重. 思路: 思考后发现,以dfs序建立树状数 ...
- CodeForces 371D Vessels(树状数组)
树状数组,一个想法是当往p注水时,认为是其容量变小了,更新时二分枚举,注意一些优化. #include<cstdio> #include<iostream> #include& ...
- Mishka and Interesting sum Codeforces Round #365 (树状数组)
树状数组,与Turing Tree类似. xr[i]表示从1到i的抑或,树状数组维护从1到i每个数只考虑一次的异或,结果为sum(r) ^ sum(l) ^ xr[r] ^ xr[l] 其中xr[r] ...
- Codeforces 1096F(dp + 树状数组)
题目链接 题意: 对于长度为$n$的排列,在已知一些位的前提下求逆序对的期望 思路: 将答案分为$3$部分 $1.$$-1$与$-1$之间对答案的贡献.由于逆序对考虑的是数字之间的大小关系,故假设$- ...
- DNA Evolution CodeForces - 828E(树状数组)
题中有两种操作,第一种把某个位置的字母修改,第二种操作查询与[L, R]内与给出字符串循环起来以后对应位置的字母相同的个数.给出的字符串最大长度是10. 用一个四维树状数组表示 cnt[ATCG的编号 ...
随机推荐
- 解决spring-boot 各版本包冲突兼容的方法
思路 在微服务盛行的当下,spring boot 流行程度已经家喻户晓.但同时,随着spring boot 快速迭代,出现了很多版本,比如当前已经推出了2.2.x-SNAPSHOT/ , ...
- python 文件压缩及解压
文件压缩 import os import zipfile def zip_dir(dirname,zipfilename): """ | ##@函数目的: 压缩指定目录 ...
- js的dom操作(整理)(转)
js的dom操作整理(整理)(转) 一.总结 一句话总结: dom操作有用原生js的dom操作,也可以用对js封装过的jquery等插件来来更加方便的进行dom操作 1.dom是什么? 对于JavaS ...
- Resharper错误提示方法的命名
Resharper-->Options-->C#-->Naming Style
- 发布机制-灰度发布-例子:QZone
ylbtech-发布机制-灰度发布-例子:QZone QZone是另外一个采用灰度发布的例子.大家都知道,QZone在过去的一年中改进是巨大的,从以前慢悠悠的老爷爷变成了一个充满青春活力的小伙子.其中 ...
- /lib64/libstdc++.so.6: version `CXXABI_1.3.8’ not found(转载)
原文地址:https://blog.csdn.net/EI__Nino/article/details/100086157 终极一战 绝命一击 ImportError: /lib64/libstdc+ ...
- C# 后台服务 web.config 中 项“ConnectionString”已添加。问题
是自己在一网站下建了虚拟目录.原本网站为空,后来自己改了路径,有了默认配置很久后打开原本ok的虚拟目录,坑爹了.杯具了.代码:ConfigurationManager.ConnectionString ...
- Rancher Server部署方式及Rancher HA环境部署
类似Rancher这种的容器管理和编排工具,它可以很快地让每个组织获得高效的弹性集群管理能力.当前技术世界的发展形势就是让开发人员从繁琐的应用配置和管理中解放出来,使用容器镜像来处理复杂的程序运行依赖 ...
- JAVA解析_操纵_JS_JAVA_JS引擎
http://uuhorse.iteye.com/blog/1705684 http://blog.csdn.net/chinajash/article/details/1491570 http:// ...
- svn本地文件颜色详解
1.红色感叹号表示这个文件从服务器上下载下来以后,在本地被修改过.这时执行提交操作就可以了.2.黄色感叹号表示这个文件在提交的时候发现存在冲突,也就是说有别人在你提交之前对这个文件的同一个版本进行了修 ...