Solution

按 \(x\) 关键字升序排序,依次枚举每个点

考虑对任意 \(x_j < x_i\),那么当 \(v_j \leq v_i\) 时,它们不会相交,且 \(dis\) 就是它们初态的距离 \(x_i-x_j\)

开两个树状数组,以离散化后的 \(v\) 为下标,一个维护个数和,一个维护坐标和

那么每次询问的答案就是 个数和 $\cdot x_i - $ 坐标和

然后把这个点插进去即可

#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 200005; struct point {
int v,x;
bool operator < (const point &b) {
return x<b.x;
}
} p[N]; int n,ans; struct ar {
int b[N];
int lowbit(int x) {return x&(-x);}
void modify(int x,int v) {
for(;x<=n;x+=lowbit(x)) (b[x]+=v);
}
int query(int x) {
int ans=0;
for(;x;x-=lowbit(x)) (ans+=b[x]);
return ans;
}
} a,b; map<int,int> mp; signed main() {
ios::sync_with_stdio(false);
cin>>n;
for(int i=1;i<=n;i++) cin>>p[i].x;
for(int i=1;i<=n;i++) cin>>p[i].v, mp[p[i].v]++;
int ind=0;
for(auto i=mp.begin();i!=mp.end();i++) i->second=++ind;
for(int i=1;i<=n;i++) p[i].v = mp[p[i].v];
sort(p+1,p+n+1);
for(int i=1;i<=n;i++) {
ans += a.query(p[i].v) * p[i].x - b.query(p[i].v);
a.modify(p[i].v, 1);
b.modify(p[i].v, p[i].x);
}
cout<<ans<<endl;
}

最新文章

  1. [bzoj2463]谁能赢呢
  2. IOS APP上下黑边问题
  3. TP中不区分大小写__APP__和__URL__的注意事项
  4. 去掉hint提示文字
  5. Oracle 自己主动诊断资料档案库 (ADR)、自己主动诊断工作流、ADRCI工具
  6. Struts2中将.action改为.do
  7. 编写一个程序实现strlen函数的功能
  8. jquery mobile -role
  9. 【WPF】学习笔记(三)——这个家伙跟电子签名板有个约定
  10. .net 上传文件 Failed to load resource: net::ERR_CONNECTION_RESET Bug 解决
  11. Django之 静态模板渲染
  12. Hyper-V:无法打开虚拟机XXX,因为虚拟机监控程序未运行
  13. .net DataTable序列化成Json
  14. 将png图片转换为字体图标
  15. String----是一个对象
  16. python之模块datetime 常见操作
  17. .net 运行中出现的错误解决方法记录
  18. Django实现任意文件上传(最简单的方法)
  19. bzoj 2226 LCMSum 欧拉函数
  20. 易普优APS高级计划排程系统系列提纲:行业知识,业务建模,排程算法,计划可视化,平台框架,案例分享

热门文章

  1. sizeof(&#39;a&#39;)
  2. MSVC下快速Unicode I/O
  3. Python 代码风格规范(Google)
  4. 调用caffe脚本将图片转换为了lmdb格式
  5. Expect &amp; Shell: 网络设备配置备份
  6. 【Bullet引擎】刚体类 —— btRigidBody
  7. Java类的加载过程与ClassLoader的理解及测试
  8. pytorch之 RNN 参数解释
  9. python yml 文件处理
  10. OSPF理论