CF1167F Scalar Queries (线段树/树状数组)
题意

题解
对于[l,r]中的一个数,不论[l,r]有多大,只有比它小的数可以影响到它的排名,那么就可以把ai从小到大排序,一个一个加入线段树中,线段树中下表为 i 的是ai(原来的位置,不是排序后的)分别为最右端和最左端时的排名总和(设为suml[i]、sumr[i]),ai的总贡献就是 ai * (suml[i-1] * (n-i+1) + sumr[i] * i)
当循环到一个点 i 时,他左边的任意一个点 j 会为 l <= j 且 r >= i 的区间中 i 的排名贡献1,右边的任意一个点 k 会为 l <= i 且 r >= k 的区间中 i 的排名贡献1,他自己也有贡献
所以加入一个点 i 时,就要把 i~n 的 suml 都加上 i ,把 1~i 的 sumr 都加上 n-i+1。
CODE
#include<cstdio>
#include<cstring>
#include<iostream>
#include<cmath>
#include<queue>
#include<stack>
#include<vector>
#include<algorithm>
#define MAXN 500005
#define MAXM 1000005
#define ENDL putchar('\n')
#define LL long long
#define DB double
#define lowbit(x) ((-x)&(x))
//#define int LL
//#pragma GCC optimize(2)
using namespace std;
inline LL read() {
	LL f = 1,x = 0;char s = getchar();
	while(s < '0' || s > '9') {if(s == '-')f = -1;s = getchar();}
	while(s >= '0' && s <= '9') {x = x * 10 + (s - '0');s = getchar();}
	return x * f;
}
const int jzm = 1000000007;
int n,m,i,j,s,o,k;
struct it{
	int nm,id;
}a[MAXN];
bool cmp(it a,it b) {return a.nm < b.nm;}
int cl[MAXN],cr[MAXN];
void addt(int *c,int x,int y) {
	while(x <= n) {
		c[x] = (c[x] +0ll+jzm + y) % jzm;
		x += lowbit(x);
	}return ;
}
int sum(int *c,int x) {
	int as = 0;
	while(x > 0) {
		as = (as +0ll+jzm + c[x]) % jzm;
		x -= lowbit(x);
	}
	return as;
}
int main() {
	n = read();
	for(int i = 1;i <= n;i ++) {
		a[i].nm = read();a[i].id = i;
	}
	sort(a + 1,a + 1 + n,cmp);
	int ans = 0;
	for(int i = 1;i <= n;i ++) {
		addt(cl,a[i].id,a[i].id);
		addt(cr,1,n - a[i].id + 1);
		addt(cr,a[i].id+1,a[i].id - n - 1);
		ans = (ans +0ll+jzm +(sum(cl,a[i].id-1) *1ll* (n - a[i].id + 1) % jzm +0ll+ sum(cr,a[i].id) *1ll* a[i].id % jzm) % jzm *1ll* a[i].nm % jzm) % jzm;
//		printf("ans: %d\n",ans);
	}
	printf("%d\n",ans);
	return 0;
}CF1167F Scalar Queries (线段树/树状数组)的更多相关文章
- Codeforces 1167 F Scalar Queries 计算贡献+树状数组
		题意 给一个数列\(a\),定义\(f(l,r)\)为\(b_1, b_2, \dots, b_{r - l + 1}\),\(b_i = a_{l - 1 + i}\),将\(b\)排序,\(f(l ... 
- CodeForces -163E :e-Government (AC自动机+DFS序+树状数组)
		The best programmers of Embezzland compete to develop a part of the project called "e-Governmen ... 
- codeforces#1167F. Scalar Queries(树状数组+求贡献)
		题目链接: https://codeforces.com/contest/1167/problem/F 题意: 给出长度为$n$的数组,初始每个元素为$a_i$ 定义:$f(l, r)$为,重排$l$ ... 
- Turing Tree_线段树&树状数组
		Problem Description After inventing Turing Tree, 3xian always felt boring when solving problems abou ... 
- HDU  3874  Necklace (树状数组 | 线段树  的离线处理)
		Necklace Time Limit: 15000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total S ... 
- HDU 4031 Attack(线段树/树状数组区间更新单点查询+暴力)
		Attack Time Limit: 5000/3000 MS (Java/Others) Memory Limit: 65768/65768 K (Java/Others) Total Sub ... 
- HDU 4605  Magic Ball Game(可持续化线段树,树状数组,离散化)
		Magic Ball Game Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) ... 
- Super Mario 树状数组离线  || 线段树
		Super Mario Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ... 
- 2019南昌网络赛  I. Yukino With Subinterval 树状数组套线段树
		I. Yukino With Subinterval 题目链接: Problem Descripe Yukino has an array \(a_1, a_2 \cdots a_n\). As a ... 
随机推荐
- 20天等待,申请终于通过,安装和体验IntelliJ IDEA新UI预览版
			欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 关于IDEA的预览版 IDEA会启用新的UI,这事情之 ... 
- 你难道不知道Vue-cookie?
			install npm install vue-cookies --save main.js import VueCookies from 'vue-cookies'Vue.use(VueCookie ... 
- 建立QT工程的规范型,以及重要性
			当前管理开发多个项目,故名Projects 下一级目录,具体项目,故示例Project,根据实际情况自行取名 再下一级目录,有三个子目录 bin:生成的可执行文件或者动态链接库,build:编译源码时 ... 
- 基于thinkphp6 layui的优秀极速后台开发框架推荐
			很多时候我们在做项目开发的时候,苦于没有好一点的轮子,自己动手开发的话,太耗费时间了,如果采用VUE的话,学习成本跟调试也比较麻烦, 而且有时候选用的东西甲方也不太容易接受,现在给大家介绍一款优秀的极 ... 
- VisonPro · 视觉工具列表说明
- python小题目练习(十一)
			题目:大乐透号码生成器 需求:使用Random模块模拟大乐透号码生成器,选号规则为:前区在1 ~ 35的范围内随机产生不重复 的5个号码,后区在1~ 12的范围内随机产生不重复的2个号码.效果如图8. ... 
- 端口被占用的问题解决 Web server failed to start. Port ×× was already in use
			出现此问题是端口被占用了,只需要关闭正在使用的端口就行 解决思路: 1.在服务器中更改port端口号,改为不冲突,没有被占用的端口. 2.找出被占用的端口,结束被占用的端口 解决结束被占用的端口的方法 ... 
- js与java encodeURI 进行编码与解码
			JS escape()使用转义序列替换某些字符来对字符串进行编码 JavaScript 中国 编码后 JavaScript %u4E2D%u56FD unescape()对使用 encodeUR ... 
- 记一次排查线上MySQL死锁过程,不能只会curd,还要知道加锁原理
			昨晚我正在床上睡得着着的,突然来了一条短信. 啥,线上MySQL死锁了,我赶紧登录线上系统,查看业务日志. 能清楚看到是这条insert语句发生了死锁. MySQL如果检测到两个事务发生了死锁,会回滚 ... 
- 史上最全学习率调整策略lr_scheduler
			学习率是深度学习训练中至关重要的参数,很多时候一个合适的学习率才能发挥出模型的较大潜力.所以学习率调整策略同样至关重要,这篇博客介绍一下Pytorch中常见的学习率调整方法. import torch ... 
