当前位置:网站首页>洛谷P5094 MooFest G 加强版
洛谷P5094 MooFest G 加强版
2022-08-02 17:57:00 【CLH_W】
题目描述
每一年,约翰的 NN 只奶牛参加奶牛狂欢节。这是一个全世界奶牛都参加的大联欢。狂欢节包括很多有趣的活动,比如干草堆叠大赛、跳牛栏大赛,奶牛之间有时还相互扎屁股取乐。当然,她们会排成一列嚎叫,来欢庆她们的节日。奶牛们的叫声实在刺耳,以致于每只奶牛的听力都受到不同程度的损伤。现在告诉你奶牛 ii 的听力为 v_iv
i
,这表示如果奶牛 jj 想说点什么让她听到,必须用高于 v_i \times dis(i,j)v
i
×dis(i,j) 的音量。因此,如果奶牛 ii 和 jj 想相互交谈,她们的音量必须不小于 \max (v_i,v_j) \times dis(i,j)max(v
i
,v
j
)×dis(i,j)。其中 dis(i,j)dis(i,j) 表示她们间的距离。
现在 NN 只奶牛都站在一条直线上了,每只奶牛还有一个坐标 x_ix
i
。如果每对奶牛都在交谈,并且使用最小音量,那所有 N(N-1)/2N(N−1)/2 对奶牛间谈话的音量之和为多少?
输入格式
第 11 行输入一个整数 NN 。
接下来 NN 行,每行输入两个数 v_iv
i
和 x_ix
i
,分别代表第 ii 头奶牛的听力和坐标。
输出格式
输出一个数,代表这 N(N-1)/2N(N−1)/2 对奶牛谈话时的音量之和。
输入输出样例
输入 #1复制
4
3 1
2 5
2 6
4 3
输出 #1复制
57
说明/提示
数据范围
因为原数据下 O(N^2)O(N
2
) 算法可以通过,所以新添加了一些增强数据。
原数据作为子任务 11,新添加的数据作为子任务 22。
子任务 11(11 分):1 \leq N,V_i,x_i \leq 2 \times 10^41≤N,V
i
,x
i
≤2×10
4
。
子任务 22(9999 分):1 \leq N,V_i,x_i \leq 5 \times 10^41≤N,V
i
,x
i
≤5×10
4
。
上代码:
#include<bits/stdc++.h>
using namespace std;
const long long N=50005;
struct cow{
long long v,p;
bool operator<(const cow& c) const{
return p<c.p;
}
}a[N];
long long n,m,lb[N],c1[N],c2[N],caozuo,p,q,u,ans;
inline int read()
{
int x=0,f=1;char ch=getchar();
while (!isdigit(ch)){
if (ch=='-') f=-1;ch=getchar();}
while (isdigit(ch)){
x=x*10+ch-48;ch=getchar();}
return x*f;
}//快读,其实没有必要,导致TLE的是下面一个地方的死循环
void add1(long long x,long long y)
{
while(x<=N)//是N,因为树状数组长度并不是n,下面同理
{
c1[x]+=y;
x+=lb[x];
}
}
void add2(long long x,long long y)
{
while(x<=N)
{
c2[x]+=y;
x+=lb[x];
}
}
long long sum1(long long x){
long long res=0;
if (x==0)
{
return 0;
}
for (;x>0;x-=lb[x])
{
res+=c1[x];
}
return res;
}
long long sum2(long long x){
long long res=0;
if (x==0)
{
return 0;
}
for (;x>0;x-=lb[x])
{
res+=c2[x];
}
return res;
}
int main(){
scanf("%d",&n);
for(int i=1;i<=N;i++)//注意这里要是N,不然会在add里加0导致死循环TLE
{
lb[i]=i&(-i);
}
for(long long i=1;i<=n;i++)
{
a[i].v=read();
a[i].p=read();
}
sort(a+1,a+n+1);//先按位置sort一遍。sort结构体在上面重载了运算符
for (long long i=1;i<=n;i++){
long long der=a[i].p*sum2(a[i].v)-sum1(a[i].v);
ans+=der*a[i].v;
add1(a[i].v,a[i].p);
add2(a[i].v,1);//c2每次++
}
for(long long i=1;i<=N;i++)
{
c1[i]=0;
c2[i]=0;
}
for (long long i=n;i>=1;i--){
long long der=sum1(a[i].v-1)-a[i].p*sum2(a[i].v-1);
ans+=der*a[i].v;
add1(a[i].v,a[i].p);
add2(a[i].v,1);
}
cout<<ans;
return 0;
}
边栏推荐
- How to ensure the security of smart factories?
- 知识点滴 - 什么是iAP2 (上)
- Taking advantage of cloud-network integration, e-Surfing Cloud has paved the way for digital transformation for government and enterprises
- 多聚体/壳聚糖修饰白蛋白纳米球/mPEG-HSA聚乙二醇人血清白蛋白纳米球的制备与研究
- MySQL基本语法
- Technical life | How to draw a big picture of business
- 玩转云端 | 天翼云对象存储ZOS高可用的关键技术揭秘
- golang刷leetcode 经典(4) 实现跳表
- NIO之Selector执行流程
- Endanger the safety of common Internet attacks have?
猜你喜欢
AI+医疗:使用神经网络进行医学影像识别分析
如何确保智能工厂的安全?
selenium安装和环境配置Firefox
redis总结_多级缓存
详细教学——1688关键词搜索API操作流程
vulnhub W34kn3ss: 1
pydev debugger: warning: trying to add breakpoint to file that does not exist: /tmp/xxx
Smart Microelectronics Releases Low-Power MM32L0130 Series MCU Products
针对时间的功能测试点,这里给你总结全面了
什么是会话劫持以及如何阻止它
随机推荐
危及安全的常见物联网攻击有哪些?
golang刷leetcode 经典(1) LRU缓存机制
2022高压电工特种作业证考试题库及答案
常用随机变量的数学期望和方差
shell中awk命令的if条件语句引入外置变量
注释
KunlunBase 1.0 发布了!
分布式 | dble 启动的时候做了什么之配置检测
在线文档Sheet技术解析
如何确保智能工厂的安全?
从技术全景到场景实战,透析「窄带高清」的演进突破
selenium安装和环境配置Firefox
DevOps之代码检查
golang 源码分析(39)hystrix-go
监控易火星版即将亮相:分布式运维帮助TOP3000大企业跨越管理鸿沟
无法超越的100米_百兆以太网传输距离_网线有哪几种?
VSTO踩坑记录(1)- 从零开始开发outlook插件
STL案例-招聘新员工
redis总结_分布式缓存
My recursive never burst stack