F - Moving Points树状数组
题:https://codeforces.com/contest/1311/problem/F
题意:给定x轴上的点以及他们的速度v,只在x轴上运动,求最小的dis之和,注意,这里的时间是可随意的,比如对于其中一个点 i 来说,只要其他点运动到离自己距离最小即可,而不是同步运动
分析:对于一对点 i 和 j 来说,以点 i 为基准,要是xj<xi,那么只要vj>xi就可以让dis为0,要是xj>xi,,那么只要vj<vi就可以让dis为0,其他情况就俩者不动就能保持dis最小为abs(xi-xj);
总结一下,只要xi<=xj&&vi<=vj,那么对答案的贡献就是abs(xi-xj),(因为越移动dis越大)其他的贡献就为0;
所以我们只要讲x升序,就可避免重复算点对,对于一个点 i 而言,对答案的贡献就是:比xi小的点的数目*xi - 比xi小的点的x之和;
因为统计全程与v的具体值无关只有大小,所可以进行离散化处理;
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int M=5e5+;
const int N=2e5+;
ll tr[M][];
struct node{
ll x,v;
bool operator <(const node &b)const{
return x<b.x;
}
}a[M];
ll lisan[M];
void update(int x,ll c){
while(x<=N){
tr[x][]++;
tr[x][]+=c;
x+=x&(-x);
}
}
ll query(int x,int k){
ll ans=;
while(x){
ans+=tr[x][k];
x-=(x&(-x));
}
return ans;
}
int main(){
ios::sync_with_stdio(false);
cin.tie();
int n;
cin>>n;
for(int i=;i<=n;i++)
cin>>a[i].x;
for(int i=;i<=n;i++)
cin>>a[i].v,lisan[i]=a[i].v;
sort(a+,a++n);
sort(lisan+,lisan++n);
int m=unique(lisan+,lisan++n)-lisan-;
ll ans=;
for(int i=;i<=n;i++){
int pos=lower_bound(lisan+,lisan++m,a[i].v)-lisan;
ll num=query(pos,);
ll sum=query(pos,);
ans+=a[i].x*num-sum;
update(pos,a[i].x);
}
cout<<ans<<endl;
return ;
}
F - Moving Points树状数组的更多相关文章
- [CF1311F] Moving Points - 树状数组
Solution 按 \(x\) 关键字升序排序,依次枚举每个点 考虑对任意 \(x_j < x_i\),那么当 \(v_j \leq v_i\) 时,它们不会相交,且 \(dis\) 就是它们 ...
- 2016-2017 ACM-ICPC Southwestern European Regional Programming Contest (SWERC 2016) F dfs序+树状数组
Performance ReviewEmployee performance reviews are a necessary evil in any company. In a performance ...
- 牛客网暑期ACM多校训练营(第五场) F - take —— 期望+树状数组+逆元
看到一篇好的博客特意转出来观摩大佬:转:https://blog.csdn.net/greybtfly/article/details/81413526 题目大意:给n个箱子排成一排,从头到尾按顺序依 ...
- 2019牛客多校第七场 F Energy stones 树状数组+算贡献转化模拟
Energy stones 题意 有n块石头,每块有初始能量E[i],每秒石头会增长能量L[i],石头的能量上限是C[i],现有m次时刻,每次会把[s[i],t[i]]的石头的能量吸干,问最后得到了多 ...
- CF1096.F. Inversion Expectation(树状数组)
A permutation of size n is an array of size n such that each integer from 1 to n occurs exactly once ...
- 51Nod 1272最大距离 (树状数组维护前缀最小值)
题目链接 最大距离 其实主流解法应该是单调栈……我用了树状数组. #include <bits/stdc++.h> using namespace std; #define rep(i, ...
- 北邮校赛 F. Gabriel's Pocket Money(树状数组)
F. Gabriel's Pocket Money 2017- BUPT Collegiate Programming Contest - sync 时间限制 2000 ms 内存限制 65536 K ...
- Codeforces Round #300 F - A Heap of Heaps (树状数组 OR 差分)
F. A Heap of Heaps time limit per test 3 seconds memory limit per test 512 megabytes input standard ...
- 牛客小白月赛12 F 华华开始学信息学 (分块+树状数组)
链接:https://ac.nowcoder.com/acm/contest/392/F来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 32768K,其他语言65536K ...
随机推荐
- C++远征--jame_yuan(慕课网)
int &a=b;引用符 int const a = 3; int *p = &a; 只读 不能 赋给 读写 有默认参数值得参数必须在参数表的最右端 void fun(int ...
- 六、Vue-Router:基础路由处理、路由提取成单独文件、路由嵌套、路由传参数、路由高亮、html5的history使用
一.vue-router的安装 官网文档 [官网]:https://cn.vuejs.org/v2/guide/routing.html [router文档]:https://router.vuejs ...
- grep -w ,grep -e的使用
1.grep -w -wDoes a word search.grep -w用于字符串精确匹配若文件中的内容包括如下:262 a326226如果 grep ‘26’ file,结果是三行全部都被显示若 ...
- docker 后台运行和进入后台运行的容器
先创建并进入一个新的被命名为newos的新容器 docker run -it --name newos docker.io/centos #创建并指定端口号映射 docker run -d -p ...
- 132-PHP子类和父类同名函数的调用
<?php class father{ //定义father类 public function cook(){ return '烹饪'; } } class son extends father ...
- C++的vector容器清空
c++内部STL库中自带了一个容器vetcor, 自带了清空方法——clear().但是clear使用之后,并不能清空数据,其数据再未被覆盖之前是不会改变的,个人猜测clear仅仅把指针挪动到了起始位 ...
- Python开源库的bug
scipy 在misc的pilutil.py中def fromimage(im, flatten=0)函数中, # workaround for crash in PIL, see #1613.im. ...
- java课程课后作业190502之单词统计续集
第1步:输出单个文件中的前 N 个最常出现的英语单词. 功能1:输出文件中所有不重复的单词,按照出现次数由多到少排列,出现次数同样多的,以字典序排列. 功能2: 指定文件目录,对目录下每一个文件执行统 ...
- 二十九、CI框架之session用法
一.我们在控制器中添加session写入和读取的2个函数,如图: 二.我们用浏览器访问login页面,可以看到有一串被加密的cookies,在CI中session也是以cookies的方式存放的 三. ...
- 腾讯电话面试总结(IEG后台开发)
1 Java面向对象:设计window画板的类框架.假设现在只有 直线.矩形.椭圆,怎么设计 2 Linux shell命令 定时怎么做 3 平时有问题经常访问那些网站 4 假设你现在是web网站 ...