https://codeforces.com/contest/1311/problem/F

这是一道线段树类型的题;

可以用权值线段树或者树状数组来解;

所以,我们可以分为两部分,第一部分是计算出到当前点位置,小于等于当前点的速度的个数 ,总的个数乘当前点的速度

减去 小于等于当前点的速度的坐标总值即为答案;

 #include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=2e5+;
int b[maxn];
struct node
{
int x,v;
}a[maxn];
bool cmp(node t1,node t2)
{
return t1.x<t2.x;
}
struct tre
{
int l;int r;
ll sum;
int num;
}tree[maxn<<];
void pushup(int root)
{
tree[root].sum=tree[root<<].sum+tree[root<<|].sum;
tree[root].num=tree[root<<].num+tree[root<<|].num;
}
void build(int l,int r,int root)
{
tree[root].l=l;tree[root].r=r;
tree[root].sum=;tree[root].num=;
if(l==r) return;
int mid=l+r>>;
build(l,mid,root<<);
build(mid+,r,root<<|);
pushup(root);
}
void update(int pos,int val,int root)
{
int L=tree[root].l,R=tree[root].r;
if(L==R){
tree[root].sum+=val;
tree[root].num+=;
return;
}
int mid=L+R>>;
if(pos<=mid) update(pos,val,root<<);
else update(pos,val,root<<|);
pushup(root);
}
ll query(int pos,int flag,int root)
{
int L=tree[root].l;
int R=tree[root].r;
if(L==R){
if(!flag) return tree[root].num;
else return tree[root].sum;
}
int mid=L+R>>;
ll ans=;
if(pos<=mid) ans+=query(pos,flag,root<<);
else{
if(!flag) ans+=tree[root<<].num;
else ans+=tree[root<<].sum;
ans+=query(pos,flag,root<<|);
}
return ans;
}
int main()
{
int n;
scanf("%d",&n);
for(int i=;i<=n;i++){
scanf("%d",&a[i].x);
}
for(int i=;i<=n;i++){
scanf("%d",&a[i].v);
b[i]=a[i].v;
}
sort(a+,a++n,cmp);
sort(b+,b++n);
int len=unique(b+,b++n)-b-;
ll ans=;
build(,2e5+,);
for(int i=;i<=n;i++){
int v=lower_bound(b+,b++len,a[i].v)-b;
ans+=query(v,,)*a[i].x-query(v,,);
update(v,a[i].x,);
}
printf("%lld\n",ans);
return ; }

F. Moving Points的更多相关文章

  1. F. Moving Points 解析(思維、離散化、BIT、前綴和)

    Codeforce 1311 F. Moving Points 解析(思維.離散化.BIT.前綴和) 今天我們來看看CF1311F 題目連結 題目 略,請直接看原題. 前言 最近寫1900的題目更容易 ...

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

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

  3. F - Moving Points树状数组

    题:https://codeforces.com/contest/1311/problem/F 题意:给定x轴上的点以及他们的速度v,只在x轴上运动,求最小的dis之和,注意,这里的时间是可随意的,比 ...

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

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

  5. HDOJ 4717 The Moving Points

    The Moving Points Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

  6. HDU 4717The Moving Points warmup2 1002题(三分)

    The Moving Points Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

  7. The Moving Points hdu4717

    The Moving Points Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

  8. HDU 4717 The Moving Points (三分)

    The Moving Points Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

  9. HDUOJ---The Moving Points

    The Moving Points Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

随机推荐

  1. C2440 “初始化”: 无法从“std::_Vector_const_iterator<std::_Vector_val<std::_Simple_types<_Ty>>>”转换为“std::_Vector_iterator<std::_Vector_val<std::_Simple_types<_Ty>>>”

    错误原因vs已经提醒的很清楚了:无法将const_iterator转换为iterator 我的出错代码是这样的 思考了很久,最后发现原来是因为将函数定义为const的缘故. 总结:当将函数定义为con ...

  2. python学习(8)实例:写一个简单商城购物车的代码

    要求: 1.写一段商城程购物车序的代码2.用列表把商城的商品清单存储下来,存到列表 shopping_mail3.购物车的列表为shopping_cart4.用户首先输入工资金额,判断输入为数字5.用 ...

  3. node -- express框架

    express node的一个框架 安装express cnpm install express -S 引入 const express = require("express"); ...

  4. javascript原生js轮播图

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  5. Java Stack使用

    1.Stack继承自Vector.遵从先进后出的规则. 2.Stack 是线程同步的.(map.List.Set是线程不同步的,需要在外部封装的时候来同步) 试例代码: public static v ...

  6. 实践:使用了CompletableFuture之后,程序性能提升了三倍

    CompletableFuture 相比于jdk5所提出的future概念,future在执行的时候支持异步处理,但是在回调的过程中依旧是难免会遇到需要等待的情况. 在jdk8里面,出现了Comple ...

  7. Blazui 常见问题:我更新了数据,为什么界面没刷新?

    首发于:http://www.blazor.group:8000/topic/reply?tpid=9 开门见山,不介绍,不废话 建议食用本文前先食用 https://www.cnblogs.com/ ...

  8. opencv —— moments 矩的计算(空间矩/几何矩、中心距、归一化中心距、Hu矩)

    计算矩的目的 从一幅图像计算出来的矩集,不仅可以描述图像形状的全局特征,而且可以提供大量关于该图像不同的几何特征信息,如大小,位置.方向和形状等.这种描述能力广泛应用于各种图像处理.计算机视觉和机器人 ...

  9. 百度架构师带你进阶高级JAVA架构,让你快速从代码开发者成长为系统架构者

    百度架构师带你进阶高级JAVA架构,让你快速从代码开发者成长为系统架构者 1.

  10. MySQL数据库root密码忘记丢失重置方法

    对于DBA来说,丢失超管用户root的密码是致命的, 可以通过添加--ship-grant-tables参数来跳过权限表. 1.忘记root密码,进不去数据库: 这个时候需要强制停库,先查看MySQL ...