当前位置:网站首页>洛谷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;
}
边栏推荐
猜你喜欢
Playing in the cloud | The key technology of Tianyi cloud object storage ZOS high availability is revealed
载20(S)-人参皂苷/细胞穿膜肽-单克隆抗体-载丝裂霉素白蛋白纳米微球的制备
手机银行体验性测试:如何获取用户真实感受
redis总结_分布式缓存
【秒杀办法】根据二叉树的先序遍历、中序遍历、后序遍历快速创建二叉树
Simulink脚本自动创建Autosar Parameter Port及Mapping
千万级QPS下服务如何才能平滑启动
Endanger the safety of common Internet attacks have?
LeetCode 2349. 设计数字容器系统(SortedSet)
How Tencent architects explained: The principle of Redis high-performance communication (essential version)
随机推荐
POE交换机全方位解读(下)
AtomicInteger详解
我用这一招让团队的开发效率提升了 100%!
How to build a quasi-real-time data warehouse?
Taking advantage of cloud-network integration, e-Surfing Cloud has paved the way for digital transformation for government and enterprises
TSF微服务治理实战系列(一)——治理蓝图
Wechat Gymnasium Appointment Mini Program Graduation Design Finished Works (7) Mid-term Inspection Report
数据治理:数据集成和应用模式的演进
mongodb的游标
分布式 | dble 启动的时候做了什么之配置检测
golang源码分析(33)pollFD
LeetCode 2343. 裁剪数字后查询第 K 小的数字
Win11dll文件缺失怎么修复?Win11系统dll文件丢失的解决方法
面试官:可以谈谈乐观锁和悲观锁吗
针对时间的功能测试点,这里给你总结全面了
MySQL表的约束
golang刷leetcode 经典(2)拓扑排序
NeRF: The Secret of 3D Reconstruction Technology in the Popular Scientific Research Circle
NIO之Selector执行流程
golang刷leetcode动态规划(9)不同路径 II