https://www.luogu.org/problem/show?pid=2657

题目描述

一群青年人排成一队,用手机互相聊天。

每个人的手机有一个信号接收指标,第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

[color=red]注意:可能有两人在同一个位置

答案在int64或long long范围内[/color]

对于公式 abs(x[i]-x[j])*max(v[i],v[j]).   先给年轻人排队,让V小的在前面

用树状数组维护第i个人的前面有多少人的x比他的小,维护前面比他小的x的人的x的总和

 #include <algorithm>
#include <cstdio> #define LL long long
const int N(+);
LL n,ans;
struct Node {
LL val,pos;
bool operator < (const Node &x)const
{
return val<x.val;
}
}people[N]; inline void read(LL &x)
{
x=; register char ch=getchar();
for(;ch>''||ch<'';) ch=getchar();
for(;ch>=''&&ch<='';ch=getchar()) x=x*+ch-'';
} #define max(a,b) (a>b?a:b) LL maxpos,sum[N],num[N];
#define lowbit(x) (x&((~x)+1))
inline void Update(LL *tr,LL i,LL x)
{
for(; i<=maxpos; i+=lowbit(i)) tr[i]+=x;
}
inline LL Query(LL *tr,LL i)
{
LL ret=;
for(; i; i-=lowbit(i)) ret+=tr[i];
return ret;
} int AC()
{
read(n);
for(int i=; i<=n; ++i)
{
read(people[i].val);
read(people[i].pos);
maxpos=max(maxpos,people[i].pos);
}
std::sort(people+,people+n+);
for(int i=; i<=n; ++i)
{
LL pos=people[i].pos,val=people[i].val;
LL numl=Query(num,pos-);
LL suml=Query(sum,pos-);
LL numr=Query(num,maxpos)-Query(num,pos);
LL sumr=Query(sum,maxpos)-Query(sum,pos);
ans+=val*(pos*numl-suml+sumr-pos*numr);
Update(num,pos,); Update(sum,pos,pos);
}
printf("%lld\n",ans);
return ;
} int Hope=AC();
int main(){;}

最新文章

  1. 基于 SailingEase WinForm Framework 开发客户端程序(3:实现菜单/工具栏按钮的解耦及状态控制)
  2. QML 从无到有 (基础)
  3. LD算法获取字符串相似度
  4. road习题(一)
  5. C#获取真实IP地址实现方法
  6. extern &ldquo;C&rdquo;原理,用法以及使用场景-2016.01.05
  7. Ubuntu 12.04 LTS(64bit) 环境下JDK、 Eclipse、 ADT、 快捷图标
  8. Poj OpenJudge 百练 2602 Superlong sums
  9. Hadoop 2.6.3动态增加/删除DataNode节点
  10. android 随手记 倒计时
  11. Python Tutorial 学习(九)--Classes
  12. 将C#程序嵌入资源中(C# 调用嵌入资源的EXE文件方法)
  13. HIVE快速入门
  14. My first essay
  15. centos7下nginx安装
  16. 编译和解释性语言和python运行方式
  17. mac下安装maven
  18. 25.75k8s
  19. web前端 ajax请求报415/400错
  20. java获取当前项目或类路径

热门文章

  1. Android 删除新版安卓fragment_main.xml
  2. Oracle 数据块损坏与恢复具体解释
  3. 使用RabbitMQ放置自己定义对象(不借助序列化工具,比如protobuffer)V2.0
  4. 0x5C 数位统计DP
  5. [Swift]注册并购买加入Apple开发者计划。提示: “你的支付授权失败。请核对你的信息并重试,或尝试其他支付方式。请联系你的银行”
  6. Elasticsearch日志收集
  7. LeetCode Weekly Contest 27
  8. Unity3d 刚体
  9. 洛谷P2851 [USACO06DEC]最少的硬币The Fewest Coins(完全背包+多重背包)
  10. Python:Matplotlib 画曲线和柱状图(Code)