题意:

给出n的质点,带着初位置和速度;

如果中途两点可以相遇dis(i,j)=0;

如果不可以相遇,mindis(i,j);

求n个点的两两质点最小dis(i,j)之和

思路:

因为当初位置x和速度v都比另一个小的时候,他们才不会相遇,所以最小的初位置想减也是abs(xi-xj)

因为速度-10^8<=v<=10^8的范围,需要离散化

将初位置进行从小到大排序,进行循环,他的速度(设v1)在所有速度的哪个位置(设pos),x1代表v1这个初始值

那么在这个位置pos之前的树状数组里存着的也是比x1小的初位置的值,用cnt[][0]存比x1小同时比v1小的点有几个,用cnt[][1]存比x1小同时比v1小的点初始值之和

每个点(初始值从小到大)的贡献x1*get(pos,0)-get(pos,1);

最后存add(pos,x1)

树状数组1~n存的是离散化后的速度,相当于从小到大进行1~ni编号。中间可能有重复ni可能小于n

 #include<bits/stdc++.h>
using namespace std;
#define ll long long
#define il inline
#define it register int
#define inf 0x3f3f3f3f
#define lowbit(x) (x)&(-x)
#define mem(a,b) memset(a,b,sizeof(a))
#define mod 998244353
const int maxn=2e5+;
int n,t,m;
struct node{
int x,v;
friend bool operator<(const node a,const node b){
if(a.x==b.x){
return a.v<b.v;
}
return a.x<b.x;
}
}a[maxn];
int v[maxn];
ll cnt[maxn][];
il void add(int x,int val){
for(it i=x;i<=n;i+=lowbit(i)){
cnt[i][]++;
cnt[i][]+=(ll)val;
}
return ;
}
il ll get(int x,int k){
ll sum=;
while(x){
sum+=cnt[x][k];
x-=lowbit(x);
}
return sum;
}
int main(){
scanf("%d",&n);
for(it i=;i<n;i++){
scanf("%d",&a[i].x);
}
for(it i=;i<n;i++){
scanf("%d",&a[i].v);
v[i]=a[i].v;
}
sort(a,a+n);sort(v,v+n);
ll ans=;
for(it i=;i<n;i++){
int pos=upper_bound(v,v+n,a[i].v)-v;
ans+=(ll)a[i].x*get(pos,)-get(pos,);
add(pos,a[i].x);
}
printf("%lld\n",ans);
return ;
}

这场让我上了蓝,但不得不说降智场,D题在用bfs做,写了整整一个半小时,然后wa,后面其实都能做但就是比赛的时候不敢,也容易慌

这场前三题半小时不到就完成了,然后看到F比E过的还多,瞄了一眼F,想了想把速度从1~n编码就又去想D了。然后想歪了

upd贴一张第一次上蓝

Codeforces Round #624 (Div. 3) F的更多相关文章

  1. Codeforces Round #624 (Div. 3) F. Moving Points 题解

    第一次写博客 ,请多指教! 翻了翻前面的题解发现都是用树状数组来做,这里更新一个 线段树+离散化的做法: 其实这道题是没有必要用线段树的,树状数组就能够解决.但是个人感觉把线段树用熟了会比树状数组更有 ...

  2. 详细讲解Codeforces Round #624 (Div. 3) F. Moving Points

    题意:给定n个点的初始坐标x和速度v(保证n个点的初始坐标互不相同), d(i,j)是第i个和第j个点之间任意某个时刻的最小距离,求出n个点中任意一对点的d(i,j)的总和. 题解:可以理解,两个点中 ...

  3. Codeforces Round #624 (Div. 3)(题解)

    Codeforces Round #624 (Div.3) 题目地址:https://codeforces.ml/contest/1311 B题:WeirdSort 题意:给出含有n个元素的数组a,和 ...

  4. Codeforces Round #485 (Div. 2) F. AND Graph

    Codeforces Round #485 (Div. 2) F. AND Graph 题目连接: http://codeforces.com/contest/987/problem/F Descri ...

  5. Codeforces Round #486 (Div. 3) F. Rain and Umbrellas

    Codeforces Round #486 (Div. 3) F. Rain and Umbrellas 题目连接: http://codeforces.com/group/T0ITBvoeEx/co ...

  6. Codeforces Round #501 (Div. 3) F. Bracket Substring

    题目链接 Codeforces Round #501 (Div. 3) F. Bracket Substring 题解 官方题解 http://codeforces.com/blog/entry/60 ...

  7. Codeforces Round #499 (Div. 1) F. Tree

    Codeforces Round #499 (Div. 1) F. Tree 题目链接 \(\rm CodeForces\):https://codeforces.com/contest/1010/p ...

  8. Codeforces Round #376 (Div. 2)F. Video Cards(前缀和)

    题目链接:http://codeforces.com/contest/731/problem/F 题意:有n个数,从里面选出来一个作为第一个,然后剩下的数要满足是这个数的倍数,如果不是,只能减小为他的 ...

  9. Codeforces Round #271 (Div. 2) F. Ant colony (RMQ or 线段树)

    题目链接:http://codeforces.com/contest/474/problem/F 题意简而言之就是问你区间l到r之间有多少个数能整除区间内除了这个数的其他的数,然后区间长度减去数的个数 ...

随机推荐

  1. java_HashMap的遍历方法_4种

    1.通过接收keySet来遍历: HashMap<String,String> map = new HashMap<>(); map.put("bb",&q ...

  2. MCPS & MIPS

    MIPS:Million Instructions Per Second MCPS:Million Cycles Per Second MIPS = Total Instructions*Sampli ...

  3. oracle 处理Session不够用

    1.执行语句 scope=spfile; scope=spfile; 2.查看现在的链接数 select count(*) from v$process --当前正在使用的 select value ...

  4. 5G将至,4G降速:是谣言还是真相?

    畅用移动智能终端设备,早已成为大众日常生活中的一部分.卫报专栏作家伯克曼提到,"据估计,70%的人会抱着手机或iPad刷资讯入睡."当移动智能终端变得如此重要时,与之息息相关的网络 ...

  5. JFinal Enjoy指令扩展管理常用文本模板

    个人博客 地址:http://www.wenhaofan.com/article/20190304102258 平时在项目中使用短信模板 邮件模板以及 站内消息通知等文本模板一般都是通过手动的字符串拼 ...

  6. 【转载】17个新手常见Python运行时错误

    转自:http://www.cnblogs.com/smile-ls/archive/2013/05/20/3088393.html 当初学 Python 时,想要弄懂 Python 的错误信息的含义 ...

  7. JS代码的位置

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. 洛谷P1170 兔八哥与猎人 欧拉函数的应用

    https://www.luogu.org/problem/P1170 #include<bits/stdc++.h> using namespace std; ],b[],c[],d[] ...

  9. 题解【Codeforces859C】Pie Rules

    题面 一道需要一定思考的 \(\text{DP}\) . 设 \(dp_i\) 表示第 \(i\) 步走的人能得到的最大分数, \(sum_i\) 表示 \(\sum_{j=i}^n a_j\) ,即 ...

  10. 题解 P4289 【[HAOI2008]移动玩具】

    题目地址:https://www.luogu.com.cn/problem/P4289 题解原地址:https://createsj.blog.luogu.org/solution-p4289 让我们 ...