bzoj4700
题解:
cdq分治
先考虑没有人被秒掉的情况
代码:
#include<bits/stdc++.h>
#define y1 ____y1
const int N=;
using namespace std;
typedef long long ll;
int bh[N],q[N],bhd[N],bha[N],A[N],d[N],P[N],T[N],n,atk;
ll ans,pr,K[N];
int comp1(const int x,const int y)
{
return A[x]*d[y]>A[y]*d[x];
}
int fc(int x,int y,int z)
{
ll x1=d[x],y1=K[x],x2=d[y],y2=K[y],x3=d[z],y3=K[z];
return (y1-y2)*(x2-x3)>=(y2-y3)*(x1-x2);
}
void cdq(int xl,int xr)
{
if (xl==xr)return;
int mid=xl+xr>>;
cdq(xl,mid);cdq(mid+,xr);
int l=,r=;
for (int i=xl;i<=mid;i++)
{
while (l<r&&fc(bhd[i],q[r],q[r-]))r--;
q[++r]=bhd[i];
}
for (int i=mid+;i<=xr;i++)
{
while (l<r&&K[q[l]]-K[q[l+]]<=(ll)A[bha[i]]*(d[q[l]]-d[q[l+]]))l++;
if (l<=r)ans=max(ans,K[bha[i]]+K[q[l]]-(ll)A[bha[i]]*d[q[l]]);
}
int i=xl,j=mid+,ptr=xl;
for (;i<=mid&&j<=xr;)
{
if (d[bhd[i]]<d[bhd[j]])bh[ptr++]=bhd[i++];
else bh[ptr++]=bhd[j++];
}
for (;i<=mid;)bh[ptr++]=bhd[i++];
for (;j<=xr;)bh[ptr++]=bhd[j++];
for (int i=xl;i<=xr;i++)bhd[i]=bh[i];
i=xl,j=mid+,ptr=xl;
for (;i<=mid&&j<=xr;)
{
if (d[bha[i]]<d[bha[j]])bh[ptr++]=bha[i++];
else bh[ptr++]=bha[j++];
}
for (;i<=mid;)bh[ptr++]=bha[i++];
for (;j<=xr;)bh[ptr++]=bha[j++];
for (int i=xl;i<=xr;i++)bha[i]=bh[i];
}
int main()
{
scanf("%d%d",&n,&atk);
for (int i=;i<=n;i++)bh[i]=i;
for (int i=;i<=n;i++)
{
scanf("%d%d",&A[i],&d[i]);
d[i]=(d[i]-)/atk+;
}
sort(bh+,bh+n+,comp1);
for (int i=;i<=n;i++)
{
P[i]=P[i-]+d[bh[i]];
T[i]=T[i-]+A[bh[i]];
bhd[i]=bha[i]=bh[i];
}
for (int i=;i<=n;i++)
{
K[bh[i]]=(ll)A[bh[i]]*(P[i]-)+(ll)(T[n]-T[i])*d[bh[i]];
pr+=(ll)A[bh[i]]*(P[i]-);
}
cdq(,n);
printf("%lld",pr-ans);
return ;
}
bzoj4700的更多相关文章
- [BZOJ4700]适者(CDQ分治+DP/李超线段树)
如果没有秒杀,就是经典的国王游戏问题,按t/a从小到大排序即可. 考虑删除两个数i<j能给答案减少的贡献:S[i]*T[i]+P[i-1]*A[i]-A[i]+S[j]*T[j]+P[j-1]* ...
- BZOJ4700 适者(贪心+cdq分治+斜率优化)
首先考虑怎么安排攻击顺序.显然如果攻击了某台兵器就应该一直连续攻击直到将其破坏,破坏所需时间可以直接算出来,设其为b.假设确定了某个破坏顺序,如果交换相邻两个兵器,显然不会对其他兵器造成影响,两种顺序 ...
- BZOJ4700: 适者
先排序,枚举删一个点,在前面找出最优的另一个点,容易推出斜率方程,平衡树维护凸包. #include<bits/stdc++.h> using namespace std; typedef ...
- 题解 【BZOJ4700】适者
题面 解析 看了好多dalao们的题解,然而还是不明白... 于是在想了半天后,决定自己写一篇题解. step 1 首先,分析题意, 应该还是比较容易想到, 要一直攻击一个兵器, 直到破坏它为止. 因 ...
随机推荐
- 【题解】Luogu P4867 Gty的二逼妹子序列
原题传送门 同Luogu P4396 [AHOI2013]作业 询问多了10倍,但还能跑过(smog #include <bits/stdc++.h> #define N 100005 # ...
- [Python]数据挖掘(1)、梯度下降求解逻辑回归——考核成绩分类
ps:本博客内容根据唐宇迪的的机器学习经典算法 学习视频复制总结而来 http://www.abcplus.com.cn/course/83/tasks 逻辑回归 问题描述:我们将建立一个逻辑回归模 ...
- 复旦大学2017--2018学年第二学期(17级)高等代数II期末考试第六大题解答
六.(本题10分) 设 $A$ 为 $n$ 阶幂零阵 (即存在正整数 $k$, 使得 $A^k=0$), 证明: $e^A$ 与 $I_n+A$ 相似. 证明 由 $A$ 是幂零阵可知, $A$ ...
- freeswitch reloadxml 出错
1.修改fs配置文件后,reloadxml控制台上报错误. 2,控制台日志显示 error near line 7301]:missing>] 查询 log 下的 freeswitch.xml. ...
- Markdown介绍
如何使用.md文件 本文档为Markdown格式,建议利用Visual Studio Code+ Markdown All in One插件修改.参考链接:基础mdbasic,高级mdextended
- 【HNOI 2018】转盘
Problem Description 一次小 \(G\) 和小 \(H\) 原本准备去聚餐,但由于太麻烦了于是题面简化如下: 一个转盘上有摆成一圈的 \(n\) 个物品(编号 \(1\) 至 \(n ...
- @resource、@Autowired、@Service在一个接口多个实现类中的应用
Spring在没有引入注解之前,传统的Spring做法是使用.xml文件来对bean进行注入,所有的内容都需要配置在.xml文件中,使配置和编程分离,却增加了可读性和复杂度. Spring注解将复杂的 ...
- selenium中CSS选择器定位
selenium元素定位,CSS选择器定位效率会高很多. CSS选择器用于选择你想要的元素的样式的模式.表格摘自“菜鸟教程”,具体用法可去查阅 选择器 示例 示例说明 CSS .class .intr ...
- Sitecore8.2 Solr5.1.0配置步骤
1.首先下载Solr安装包,官方提供了几种下载,我选的的solr的5.1.0版本zip包,下载链接:http://mirror.bit.edu.cn/apache/lucene/solr. 2.下载后 ...
- windows服务安装,卸载
首先管理员身份进入cmd cd C:\Windows\Microsoft.NET\Framework64\v4.0.30319\ 进入C:\Windows\Microsoft.NET\Framewor ...