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 ===============================废话分割线=================================== 我我 ...
随机推荐
- 洛谷 P4910 帕秋莉的手环
题意 多组数据,给出一个环,要求不能有连续的\(1\),求出满足条件的方案数 \(1\le T \le 10, 1\le n \le 10^{18}\) 思路 20pts 暴力枚举(不会写 60pts ...
- Django---drf入门
目录 1 web开发模式 2 api接口 3 postman的使用 4 Restful规范(重点) 5 drf的安装和简单使用 3 cbv源码 4 APIView源码分析 1 web开发模式 #前后端 ...
- day58 作业
目录 一.做一个图书管理系统页面 二.做一个主页模版 三.点赞 一.做一个图书管理系统页面 <!DOCTYPE html> <html lang="en"> ...
- 攻防世界-Web-ics-05
根据题目提示直接进入设备维护中心 点击云平台设备维护中心发现page=index LFI漏洞的黑盒判断方法: 单纯的从URL判断的话,URL中path.dir.file.pag.page.archiv ...
- 论TEMP临时变量与VAR静态变量
TEMP临时变量:顾名思义,这种变量类型是临时的,没有固定的存放数据的内存空间.每次扫描结束后则清零,在下个扫描周期开始时,这个变量的值都是不确定的,一般为0.使用临时变量需要遵循一个原则:先赋值再使 ...
- 数据可视化之PowerQuery篇(八)利用PowerQuery,进行更加灵活的数据分列
https://zhuanlan.zhihu.com/p/66540160 常规分列 我们最常见的就是有固定分隔符的规范数据,这种直接就按照分隔符拆分就可以了, 如果没有分割符怎么办?依然是上面的数据 ...
- Python之爬虫(十四) Scrapy框架的架构和原理
这一篇文章主要是为了对scrapy框架的工作流程以及各个组件功能的介绍 Scrapy目前已经可以很好的在python3上运行Scrapy使用了Twisted作为框架,Twisted有些特殊的地方是它是 ...
- 微博大数据即席查询(OLAP)引擎实践
前言 适用于 即席查询 场景的开源查询引擎有很多,如:Elasticsearch.Druid.Presto.ClickHouse等:每种系统各有利弊,有的擅长检索,有的擅长统计:实践证明,All In ...
- 利用EasyExcel进行对表格数据的写入
一导入依赖 <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</ ...
- 牛客网Java工程师能力评估
感觉很奇怪,出的题做完之后感觉自己没学过Java一样,不过凭借一些做题的技巧和一些记忆,正确率百分之50,排名前百分之30多,记录一下这次的题目,方便我以后进行二次复习吧 1.下面有关JVM内存,说法 ...