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 ===============================废话分割线=================================== 我我 ...
随机推荐
- SpringBoot2.x入门教程:理解配置文件
前提 这篇文章是<SpringBoot2.x入门>专辑的第4篇文章,使用的SpringBoot版本为2.3.1.RELEASE,JDK版本为1.8. 主要介绍SpringBoot配置文件一 ...
- H3c实验室-(OSPF,Nat,STP,Dhcp,Acl)v.1)
实验声明 本实验纯属学习记录性质,如有错误,请大哥帮忙提出,马上改正谢谢~还有学习H3c心态要好,他有超级多的bug!!!! 实验介绍 实验条件 实验开始 把图设计好 先说明一下RTA-RTB的线路是 ...
- 一、kafka 安装配置
Kafka是什么 Kafka最初是由LinkedIn公司采用Scala语言开发的一个分布式.多分区.多副本且基于ZooKeeper协调的内部基础设置,现已捐献给Apache基金会.Kafka是一个流平 ...
- nuxt的使用中碰到的问题
使用npm run generate生成静态页面部署 如果不是部署在域名的根目录下,则需要在nuxt.config.js中添加 // nuxt.config.js export default { r ...
- 数据可视化基础专题(十五):pyecharts 基础(二)flask 框架整合
Flask 前后端分离 Step 1: 新建一个 Flask 项目 $ mkdir pyecharts-flask-demo $ cd pyecharts-flask-demo $ mkdir tem ...
- 数据可视化之powerBI基础(三)编辑交互,体验更灵活的PowerBI可视化
https://zhuanlan.zhihu.com/p/64412190 PowerBI可视化与传统图表的一大区别,就是可视化分析是动态的,通过页面上筛选.钻取.突出显示等交互功能,可以快速进行访问 ...
- 循序渐进VUE+Element 前端应用开发(16)--- 组织机构和角色管理模块的处理
在前面随笔<循序渐进VUE+Element 前端应用开发(15)--- 用户管理模块的处理>中介绍了用户管理模块的内容,包括用户列表的展示,各种查看.编辑.新增对话框的界面处理和后台数据处 ...
- java 使用正则去重
//去重复 public static void test1() { String str = "aaactttsssfvvvvds"; String regex = " ...
- db2数据库基本添加删除表字段总结
1.添加字段 alter table [table_name] add [column_name] [column_type] 2.更改字段类型 alter table [table_name] a ...
- ASP.Net Core 3.1 With Autofac ConfigureServices returning an System.IServiceProvider isn't supported.
ASP.Net Core 3.1 With Autofac ConfigureServices returning an System.IServiceProvider isn't supported ...