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 ...
随机推荐
- 第1章 C++绪论
写于2022年5月13日: 开通博客用于学习记录分享及交流. C++复习笔记内容参考教材[双语版C++程序设计(第2版)][(爱尔兰)Paul Kelly(P. 凯利),苏小红]. 本书的网站:htt ...
- DirectX11 With Windows SDK--19(Dev) 编译Assimp并加载模型、新的Effects框架
前言 注意:这一章进行了重写,对应教程Dev分支第19章的项目,在更新完后面的项目后会替换掉原来第19章的教程 在前面的章节中我们一直使用的是由代码生成的几何模型,但现在我们希望能够导入模型设计师生成 ...
- 开源项目 PM 浅谈如何设计官网
有用户反馈进入官网首页光秃秃的一片,大家忙着做产品,忽略了官网的建设,惭愧惭愧. 确实,极简风格和极其简单还是有很大区别的. 旧的 Web 端 除了极其简单之外,它还有一个小问题, ...
- Linux静默安装Oracle21C
Linux静默安装Oracle21C 1.修改主机名及配置hosts [root@localhost ~]# hostname # 查看主机名 [root@localhost ~]# hostname ...
- VSCode配置远程免密登陆
生成秘钥 在本地pc的cmd窗口输入:ssh-keygen -t rsa 生成秘钥 C:\Users\NZY/.ssh/id_rsa.pub 该目录就是生成的秘钥要保存的地方(以我自己的电脑为例) 将 ...
- JS:!非
取非运算符: 开关思想:0为false,1为true: 把一个变量中保存一个布尔值 然后在业务执行时,修改这个变量的值: 为取反 然后通过变量的值执行分支业务 例子: var a = "12 ...
- SAP 隐式增强 Enhancement point
1.进入编辑器:SE38/SE37/SE24 Edit-->Enhancement Operations-->Create Option 2.填写相关信息,点击对号. 3.点击Enhanc ...
- MySQL十种锁,一篇文章带你全解析
MySQL有两个核心的知识点,索引和锁.前几篇文章已经详细讲解了MySQL索引实现机制,今天再一起学习一下MySQL的锁. 1 为什么要加锁? 当多个事务并发操作同一批数据的时候,如果不加锁,就无法保 ...
- elementplus轮播图初始空白
问题表现 初始轮播图出现大块空白,在规定的时间间隔后才会正常轮播出下一章图片 问题解决 动态数据添加图片,初次渲染dom因为数据还没有请求回来,所以会出现这样的bug,需要添加v-fi="l ...
- 4-2 Spring MVC框架-01
Spring MVC框架-01 Ⅰ.接收客户端请求 1. 关于Spring MVC框架 Spring MVC是基于Spring框架基础之上的 作用: 接收请求,响应结果,处理异常 主要解决了后端服务器 ...