[luogu]P2657低头一族[树状数组]
低头一族
题目描述
一群青年人排成一队,用手机互相聊天。
每个人的手机有一个信号接收指标,第i个人的接收指标设为v[i]。
如果位置在x[i]的人要和位置在xj的人聊天,那么这两人组成的一对的信号发射强度就是abs(x[i]-x[j])*max(v[i],v[j]).
现在我们想知道,这些人所有对子中的信号发射强度的总和。
输入输出格式
输入格式:
第一行一个整数N,接下来N行,每行两个整数v[i]和x[i]。
输出格式:
所有对的信号发射强度总和。
输入输出样例
输入样例1#:
4
3 1
2 5
2 6
4 3
输出样例1#:
57
【说明】
对于40%的数据,N<=5,000
对于100%的数据,N<=100,000 1≤x[i]≤20,000
注意:可能有两人在同一个位置
答案在int64或long long范围内
两点间距*两点价值最大
考虑对答案贡献的是某一价值,那么就是要找寻比他小的。所以我们先按v进行排序。
考虑用树状数组统计答案。
用两个树状数组,一个记录(1...i)中的x坐标和,另一个是个数。
那么这个点对答案的贡献为:
v[i]*(getnum(x[i])*x[i]-getsum(x[i])+tot-getsum(x[i])-(i-getnum(x))*x[i])
tot每次累加x[i]。
代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll ;
inline int read();
namespace lys{
;
struct LOW_head{
int v;
int x;
}a[];
ll bitS[N],bitN[N];
int lowbit(int x){return x&(-x);}
ll getS(int x){
ll res=;
for(;x;x-=lowbit(x)) res+=bitS[x];
return res ;
}
ll getN(int x){
ll res=;
for(;x;x-=lowbit(x)) res+=bitN[x];
return res ;
}
void insertS(int x,int y){for(;x<=N;x+=lowbit(x)) bitS[x]+=y;}
void insertN(int x){for(;x<=N;x+=lowbit(x)) bitN[x]++;}
bool cmp(const LOW_head &x,const LOW_head &y){return x.v<y.v;}
int n;
ll ans,tot;
int main(){
int i;
n=read();
;i<n;i++) a[i].v=read(),a[i].x=read();
sort(a,a+n,cmp);
;i<n;i++){
ans+=1LL*a[i].v*(1LL*(*getN(a[i].x)-i)*a[i].x-*getS(a[i].x)+tot);
tot+=a[i].x;
insertS(a[i].x,a[i].x);
insertN(a[i].x);
}
printf("%lld\n",ans);
;
}
}
int main(){
lys::main();
;
}
inline int read(){
,ff=;
char c=getchar();
'){
;
c=getchar();
}
+c-',c=getchar();
return kk*ff;
}
[luogu]P2657低头一族[树状数组]的更多相关文章
- Luogu P3374 【模板】树状数组 1
真正的模板题. 树状数组的思想很简单(不如说背代码更简单),每个节点记录多个节点的信息(每个点存x&(-x)个). 道理可以参见很多大佬的博客,最后前缀和的思想搞一下就好了.不想说也不会说. ...
- Luogu P4901 排队 fib数列+树状数组+倍增
这题让我升华..还好只重构了一遍 首先我们发现:$n$较小时,整个队伍的形态 跟 $n$ 比较大时的局部是一样的 所以我们预处理出这个队伍的形态,和每一行每个位置的质因子个数的前缀和,$O(nlogn ...
- 【Luogu】P2617Dynamic Ranking(树状数组套主席树)
题目链接 树状数组套主席树有点难懂qwq 不好理解 树状数组套主席树的直观理解应该是:树状数组的每一个节点是一棵主席树. 普通区间修改我们是创建1个线段树,树状数组套主席树的时候我们就创建log个线段 ...
- 题解报告:Luogu P3368 【模板】树状数组 2(区间修改,单点查询)
题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数数加上x 2.求出某一个数的和 输入输出格式 输入格式: 第一行包含两个整数N.M,分别表示该数列数字的个数和操作的总个数. ...
- luogu P4769 [NOI2018]冒泡排序 结论 树状数组 卡特兰数
LINK:冒泡排序 神题. 可以想到爆搜 期望得分5~10分. 打成这个样子心态不得爆炸? 仔细分析 一个不合法序列还有什么标志. 容易想到某个数字离自己位置相反的方向多走了一步. 考虑单独对每个数字 ...
- luogu P3368 【模板】树状数组 2
题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数数加上x 2.求出某一个数的和 输入输出格式 输入格式: 第一行包含两个整数N.M,分别表示该数列数字的个数和操作的总个数. ...
- luogu P2345 奶牛集会 |排序+树状数组
题目描述 约翰的N 头奶牛每年都会参加"哞哞大会".哞哞大会是奶牛界的盛事.集会上的活动很多,比如堆干草,跨栅栏,摸牛仔的屁股等等.它们参加活动时会聚在一起,第i 头奶牛的坐标为X ...
- BZOJ 1107: [POI2007]驾驶考试egz / Luogu P3463 [POI2007]EGZ-Driving Exam (树状数组 LIS)
能从iii走到所有跑道 相当于 能从iii走到111和nnn. 边反向后就相当于 能从111和nnn走到iii. 为了方便叙述,把111~nnn叫做x坐标,111~(m+1)(m+1)(m+1)叫做y ...
- LOJ P3960 列队 树状数组 vector
https://www.luogu.org/problemnew/show/P3960 树状数组预处理之后直接搞就可以了,也不是很好解释,反正就是一个模拟过程的暴力用树状数组维护,还挺巧妙的. 我为什 ...
随机推荐
- mysql生成全局id(转)
由于数据量以及IO效率的因素,很多项目对数据支持的数据库会采取分库分表的方式.使用了分库分表之后需要解决的一个问题就是主键的生成.多个表之间的主键就不能用数据库本身的自增主键来支持,因为不同表之间生成 ...
- Windown Server 2008配置tomcat9虚拟路径
一.用途 用于保存项目运产生的文件 二.步骤 1.修改conf\下的web.xml <!-- 找到listings将false改为true --> <init-para ...
- Go语言基本数据类型(四)
Go语言基本数据类型主要包含:bool,number,string 布尔类型 go中的布尔类型,只能是 true 和 false,例如:var b bool = true 数字类型 整型 类型 描述 ...
- wordpress后台编辑如何显示定义的`style.css`样式
wordpress后台编辑如何显示定义的style.css样式 由于公司官网采用wordpress进行搭建,但是却又自己设计页面,无奈主题只能自行构建了,直接修改wordpress自带的主题进行修改. ...
- 将div生成图片并下载下来
//文件需要引入html2canvas.js.jquery.js function downLoadImg(){ var element = $(".orgchart"); // ...
- mysql注入大全及防御
0.明白存在的位置:get型 post型 cookie型 http头注入 1.先测试注入点,注册框.搜索框.地址栏啥的,判断是字符型,搜索型还是数字型 字符型 1' and '1'='1 成功, 1' ...
- 破解phpStorm 2018 亲测
网上教程很多,这里我就不多赘述,我也是看其他教程试过来的. 下面分步骤介绍一下: 1.下载,我这里选用的版本是 phpStorm 2018.3 ,下载地址 https://www.newasp.net ...
- PyCharm专业版下载安装
目录 1. 推荐阅读 2. PyCharm专业版 (目录) 1. 推荐阅读 Python基础入门一文通 | Python2 与Python3及VSCode下载和安装.PyCharm安装.Python在 ...
- Laravel 中 Controller访问Model函数/常量
<?php // User.php class User extends Model { ; //进行中 const USER_TYPE_TEST = 'test'; //测试用户 // 需要在 ...
- xrdp远程
安装图形界面 yum groupinstall "GNOME Desktop" 安装epel源 yum install epel* 安装xrdp yum --enablerepo= ...