CF R 639 div2 F Review 贪心 二分
LINK:Résumé Review
这道题让我眼前一亮没想到二分这么绝.
由于每个\(b_i\)都是局部的 全局只有一个限制\(\sum_{i=1}^nb_i=k\)
所以dp没有什么用 我们只需要满足他们的累和=k即可。
容易想到每次给b加1带来的贡献是 \(\Delta_x=a_i-3{b_i}^2-3b_i-1\)
开一个堆每次取出最大值 这样显然是最优的。
不过复杂度为klogn k足足有1e14这么大。
一个绝妙的想法 每次增加的值是递减的 那么第k次增加的值也是固定的。
可以进行二分第k次增加的值 此时我们可以快速算出之前的所有的\(b_i\) 至此从而判定答案是否是最优的。
正确性比较显然 值得一提的是 二分出来之后 我的处理办法是 让每个b都达到临界点 即再增加1就会<=当前mid
这样的话 对于二分出小于答案的那些都会不合法 最后唯一被卡在最左边界的就是答案了。
值得一提的是 求出每个b 可以直接解方程 也可以采用二分 不过解方程之后调整次数我难以把握 所以再接了一个二分.
不过前者复杂度可以认为是nlogn 后者则是nlog^2.
/一个显然的做法 开堆贪心 klogn
//在这个过程中可以发现每次增加的值递减 可以二分出来这个东西.
const ll MAXN=100010;
ll n,k,ww;
ll a[MAXN],b[MAXN];
inline ll f(ll a,ll b){return a==b?-INF:a-3*b*(b+1)-1;}
//二分出来的东西要尽可能的<=x
inline ll calc(ll a,ll x)//询问当递减的值为x时的bi的值.
{
ll l=0,r=a;
while(l+1<r)
{
ll mid=(l+r)>>1;
if(f(a,mid)>x)l=mid;
else r=mid;
}
if(f(a,r)>x)return min(r+1,a);
return r;
}
inline ll check(ll x)//递减的值为x.
{
ww=0;
rep(1,n,i)
{
b[i]=calc(a[i],x);
ww+=b[i];
}
return ww<k;
}
signed main()
{
freopen("1.in","r",stdin);
ll l=0,r=0;
get(n);get(k);
rep(1,n,i)get(a[i]),r=max(r,f(a[i],0)),l=min(l,f(a[i],a[i]-1));
while(l+1<r)
{
ll mid=(l+r)>>1;
if(check(mid))r=mid;
else l=mid;
}
if(check(l))r=l;
check(r);k-=ww;
rep(1,n,i)if(k>0&&b[i]<a[i]&&f(a[i],b[i])==r)++b[i],--k;
rep(1,n,i)put_(b[i]);return 0;
}
CF R 639 div2 F Review 贪心 二分的更多相关文章
- CF R 635 div2 1337D Xenia and Colorful Gems 贪心 二分 双指针
LINK:Xenia and Colorful Gems 考试的时候没想到一个很好的做法. 赛后也有一个想法. 可以考虑答案的样子 x,y,z 可以发现 一共有 x<=y<=z,z< ...
- CF R 630 div2 1332 F Independent Set
LINK:Independent Set 题目定义了 独立集和边诱导子图.然而和题目没有多少关系. 给出一棵树 求\(\sum_{E'\neq \varnothing,E'\subset E}w(G( ...
- E CF R 85 div2 1334E. Divisor Paths
LINK:Divisor Paths 考试的时候已经想到结论了 可是质因数分解想法错了 导致自闭. 一张图 一共有D个节点 每个节点x会向y连边 当且仅当y|x,x/y是一个质数. 设f(d)表示d的 ...
- CF R 632 div2 1333F Kate and imperfection
赛后看了半天题 才把题目看懂 英语水平极差. 意思:定义一个集合S的权值为max{gcd(a,b)};且\(a\neq b\) 这个集合可以从1~n中选出一些数字 求出当集合大小为k时的最小价值. 无 ...
- CF R 632 div2 1333D Challenges in school №41
LINK:Challenges in school №41 考试的时候读错题了+代码UB了 所以wa到自闭 然后放弃治疗. 赛后发现UB的原因是 scanf读int类型的时候 宏定义里面是lld的类型 ...
- cf 442 div2 F. Ann and Books(莫队算法)
cf 442 div2 F. Ann and Books(莫队算法) 题意: \(给出n和k,和a_i,sum_i表示前i个数的和,有q个查询[l,r]\) 每次查询区间\([l,r]内有多少对(i, ...
- The 14th Zhejiang Provincial Collegiate Programming Contest Sponsored by TuSimple - F 贪心+二分
Heap Partition Time Limit: 2 Seconds Memory Limit: 65536 KB Special Judge A sequence S = { ...
- Codeforces #452 Div2 F
#452 Div2 F 题意 给出一个字符串, m 次操作,每次删除区间 \([l,r]\) 之间的字符 \(c\) ,输出最后得到的字符串. 分析 通过树状数组和二分,我们可以把给定的区间对应到在起 ...
- bzoj 1178: [Apio2009]CONVENTION会议中心(少见做法掉落!)【贪心+二分】
数组若干+手动二分一个的算法,bzoj rank8 ===============================废话分割线=================================== 我我 ...
随机推荐
- 转载---最简单的JavaScript模板引擎
转载自:http://www.cnblogs.com/dolphinX/p/3489269.html,http://blog.jobbole.com/56689/
- P4408 逃学的小孩 题解
题目描述 Chris家的电话铃响起了,里面传出了Chris的老师焦急的声音:"喂,是Chris的家长吗?你们的孩子又没来上课,不想参加考试了吗?"一听说要考试,Chris的父母就心 ...
- NOI Online #3 提高组 T1水壶 题解
题目描述 有 n 个容量无穷大的水壶,它们从 1∼n 编号,初始时 i 号水壶中装有 Ai 单位的水. 你可以进行不超过 k 次操作,每次操作需要选择一个满足 1≤x≤n−1 的编号 x,然后把 x ...
- Linux超强截图工具flameshot
Pop!_OS自带的截屏快捷键如下 但讲道理这个是真的不好用 所以我们借助第三方的截图工具,这里推荐flameshot(火焰截图) 在终端键入以下命令即可安装 sudo apt update sudo ...
- 电商项目app开发
购物app的开发 首先我们本次要写的是一个电商的项目,项目主要功能有登录.注册.商品展示.轮播图.加入购物车.购物车管理.支付管理.地址管理.个人信息的修改.商品的分类展示.微信支付等等.主要使用vu ...
- redis(二十):Redis 架构模式实现(主从复制)
什么是主从复制 我们可以通过slaveof <host> <port>命令,或者通过配置slaveof选项,来使当前的服务器(slave)复制指定服务器(master)的内容, ...
- 机器学习实战基础(十三):sklearn中的数据预处理和特征工程(六)特征选择 feature_selection 简介
当数据预处理完成后,我们就要开始进行特征工程了. 在做特征选择之前,有三件非常重要的事:跟数据提供者开会!跟数据提供者开会!跟数据提供者开会!一定要抓住给你提供数据的人,尤其是理解业务和数据含义的人, ...
- CMDB02/ 单例模式、资产采集参考命令、日志处理
CMDB02/单例模式.资产采集参考命令.日志处理 目录 CMDB02/单例模式.资产采集参考命令.日志处理 1. 单例模式 1.1 多例模式 1.2 单例模式 1.2.1 单例模式/错误 1.2.2 ...
- python并发编程02 /多进程、进程的创建、进程PID、join方法、进程对象属性、守护进程
python并发编程02 /多进程.进程的创建.进程PID.join方法.进程对象属性.守护进程 目录 python并发编程02 /多进程.进程的创建.进程PID.join方法.进程对象属性.守护进程 ...
- Python模块02/序列化/os模块/sys模块/haslib加密/collections
Python模块02/序列化/os模块/sys模块/haslib加密/collections 内容大纲 1.序列化 2.os模块 3.sys模块 4.haslib加密 5.collections 1. ...