[CF1311F] Moving Points - 树状数组

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;
}
[CF1311F] Moving Points - 树状数组的更多相关文章
- F - Moving Points树状数组
题:https://codeforces.com/contest/1311/problem/F 题意:给定x轴上的点以及他们的速度v,只在x轴上运动,求最小的dis之和,注意,这里的时间是可随意的,比 ...
- POJ 2464 Brownie Points II(树状数组)
一开始还以为对于每根竖线,只要与过了任意一点的横线相交都可以呢,这样枚举两条线就要O(n^2),结果发现自己想多了... 其实是每个点画根竖线和横线就好,对于相同竖线统计(一直不包含线上点)右上左下总 ...
- POJ 2464 Brownie Points II --树状数组
题意: 有点迷.有一些点,Stan先选择某个点,经过这个点画一条竖线,Ollie选择一个经过这条直接的点画一条横线.Stan选这两条直线分成的左下和右上部分的点,Ollie选左上和右下部分的点.Sta ...
- acdream1197 Points In Cuboid(hash树状数组)
题目链接:http://acdream.info/problem?pid=1197 题意:给出三维空间n个点,m个查询,每次查询某个立方体内的点的个数. 思路:按照一维排序,根据查询插入,其他两位用二 ...
- POJ 2464 Brownie Points II (树状数组,难题)
题意:在平面直角坐标系中给你N个点,stan和ollie玩一个游戏,首先stan在竖直方向上画一条直线,该直线必须要过其中的某个点,然后ollie在水平方向上画一条直线,该直线的要求是要经过一个sta ...
- See you~_树状数组
Problem Description Now I am leaving hust acm. In the past two and half years, I learned so many kno ...
- See you~(二维树状数组)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1892 See you~ Time Limit: 5000/3000 MS (Java/Others) ...
- TZOJ 2725 See you~(二维树状数组单点更新区间查询)
描述 Now I am leaving hust acm. In the past two and half years, I learned so many knowledge about Algo ...
- HDU1541 树状数组
Stars Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submi ...
随机推荐
- 发生android.view.ViewRoot$CalledFromWrongThreadException异常的解决方案
在Android平台下,进行多线程编程时,经常需要在主线程之外的一个单独的线程中进行某些处理,然后更新用户界面显示.但是,在主线线程之外的线程中直接更新页面显示的问题是 报异常:android.vie ...
- Node——request使用代理
本文知识点 Node环境搭建 使用代理 进阶学习 环境配置 Node 安装request 安装request npm install request 确认环境安装无误 node -v 代码样例 使用代 ...
- HDU_3038_并查集
http://acm.hdu.edu.cn/showproblem.php?pid=3038 并查集的应用,选择哪个点作为根结点都没关系,多了一个sum数组保存每个点到根节点的和,注意刚开始a减了1, ...
- Altium Designer 14安装破解
Altium Designer 14简称AD14,是一款专业的PCB设计软件,利用他可以计出专业的PCB元件.Altium Designer 14.3.10是目前的最新版本. Altium Desig ...
- Python中zip()函数的解释和可视化
zip()的作用 先看一下语法: zip(iter1 [,iter2 [...]]) -> zip object Python的内置help()模块提供了一个简短但又有些令人困惑的解释: 返回一 ...
- 【WPF学习】第四十二章 透明
WPF支持真正的透明效果.这意味着,如果在一个性质或元素上层叠另外几个形状或元素,并让所有这些形状和元素具有不同的透明度,就会看到所期望的效果.通过该特性能够创建透过上面的元素可以看到的的图像背景,这 ...
- javascript 浅复制 和 深复制
如何区分深拷贝与浅拷贝,简单点来说,就是假设 B复制了A,当修改A时,看B是否会发生变化,如果B也跟着变了,说明这是浅拷贝, 如果B没变,那就是深拷贝 实现思路 1 json 深度拷贝 2 遍历递归 ...
- php 搭建webSocket
<?php //2.设计一个循环挂起WebSocket通道,进行数据的接收.处理和发送 //对创建的socket循环进行监听,处理数据 function run(){ //死循环,直到socke ...
- ansible----sudo
ansible 执行sudo的root命令,参看https://www.cnblogs.com/infaaf/p/10049896.html [nnn]103 ansible_ssh_host=10. ...
- php插件名称 yum安装
提示缺少 安装 DOM扩展模块 yum install php-xml PDO ...