# BJTUOJ 一颗姜会长多高? (二分+前缀和+简单贪心)
原题链接.
1.题意
给你一堆高度为h[i]的姜,现有2种操作,可操作个数分别为m1,m2。操作1:某个姜高度增加1,操作2:某个姜高度直接变成某个特定值。(当然m2<n)。
现在给你t个询问,每个询问给你m1,m2,问你在此条件下最矮的姜的最大值为多少?
2.思路
首先,操作2可以任意增加高度,可以贪心地把最小的m2棵姜施加操作2,从而只讨论对剩下的n-m2棵施加操作1。那么问题就转换成,对于剩下的姜使用操作1,最矮的最高为多少?
其次,我们先考虑二分答案ans。那么咋写check函数?这需要先找到最后一个高度小于等于ans的姜j,然后判断m1是否小于等于(j-m2)*ans-(sum[j]-sum[m2]),这其实又是一个二分!那么时间复杂度实际为log1e18 * log1e5 * O(M)O(M)O(M),这样实际上会被卡!
转换思路,发现姜的高度如果被补成相同高度后,就可以用 O1的复杂度求出这些姜最矮的高度。于是考虑二分剩下的姜,找到最大的下标j,使得把m2+1到j这些姜补齐到a[j]的高度所需的操作数刚好小于等于m1,我们可以发现,答案其实就是a[j]+(m1-price)/(j-m2)!其中,price是把这些姜补齐到a[j]所需操作数。
然后需要注意一下:开cincout加速会TLE,卡了我好久,c++必须用scanf(当然也可能是没有把endl换成’\n’的问题)。
以及,万能头文件用时会整整慢上一秒,这是把编译时间也算进去了吗??
3.代码
#include<cstdio>
#include <algorithm>
//#include <bits/stdc++.h>using namespace std;typedef long long LL;
const int N=1e5+10;
const LL M=1e16;int n,m;
int a[N];
LL sum[N];
LL mx,my;bool check(LL x)
{LL tar=(x-my)*a[x-1]-sum[x]+sum[my];//目标值return tar<=mx;
}LL bisearch()
{LL l=my+1,r=(LL)n;//my<nwhile(l<r){LL mid=(l+r+1)>>1;if(check(mid))l=mid;else r=mid-1;}LL res=a[l-1]+(mx-((l-my)*a[l-1]-sum[l]+sum[my]))/(l-my);return res;
}
int main()
{scanf("%d %d",&n,&m);for(int i=0;i<n;i++)scanf("%d",&a[i]);sort(a,a+n);for(int i=0;i<n;i++)sum[i+1]=sum[i]+(LL)a[i];while(m--){scanf("%lld %lld",&mx,&my);printf("%lld\n",bisearch());}
}
4. 收获
学到了永远不要放弃治疗,其实你离想出答案只差一步。
# BJTUOJ 一颗姜会长多高? (二分+前缀和+简单贪心)相关推荐
- P1083 借教室(标记永久化线段树/二分+前缀和)难度⭐⭐⭐★
P1083 借教室 标记永久化线段树 很典型的区间修改问题,先输入赋值建树(这就是最典型的线段树呀,别忘了),然后修改 这里问的是是否有足够的空教室,所以线段树中 min 代表的是当前区间内最小的剩余 ...
- 卷进大厂系列之LeetCode刷题笔记:二分查找(简单)
LeetCode刷题笔记:二分查找(简单) 学算法,刷力扣,加油卷,进大厂! 题目描述 涉及算法 题目解答 学算法,刷力扣,加油卷,进大厂! 题目描述 力扣题目链接 给定一个 n 个元素有序的(升序) ...
- POJ 3061 (二分+前缀和or尺取法)
题目链接: http://poj.org/problem?id=3061 题目大意:找到最短的序列长度,使得序列元素和大于S. 解题思路: 两种思路. 一种是二分+前缀和.复杂度O(nlogn).有点 ...
- 【实数二分/前缀和维护】Best Cow Fences
Poj 2018 Best Cow Fences 实数二分+前缀和维护 调了一晚上, 但发现没什么注意事项orz 无输出只因eps定义成了int型QAQ哭唧唧 #include<cstdio&g ...
- pcm输出还是源码输出_观看高清必备 如何简单实现源码输出
目前不少蓝光当中都采用了多声道音轨,其中不乏DTS-MA或Dolby TrueHD格式的音频,如果使用多声道音箱外加源码输出的话能获得不俗的视听效果 观看高清必备 如何简单实现源码输出 [PChome ...
- corosync+pacemaker+drbd构建mysql高可用平台的简单案例
写在前面:如果此文有幸被某位朋友看见并发现有错的地方,希望批评指正.如有不明白的地方,愿可一起探讨. 案例拓扑图 说明: ansible主机主要作用在于配置和安装两台corosync+pacemake ...
- [二分][前缀和]洛谷 P1083 借教室
题意: 有n天,m个请求.n天内每天的可用教室为a_iai个,m个请求是从l到r天租借t个教室. 如果某一天的教室分配无法满足,则输出当前的订单号. 思考: 一开始根本没想到这个东西怎么二分.. ...
- 高通平台gpio简单调试
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u010164190/article/details/83860374 0.编译读写gpio寄存 ...
- (转载)hadoop2.2.0集群的HA高可靠的最简单配置
转载网址:http://www.cnblogs.com/meiyuanbao/p/hadoop2.html 简介 hadoop中的NameNode好比是人的心脏,非常重要,绝对不可以停止工作.在had ...
最新文章
- python3 bytes和bytearray总结
- Python--一些重要的小tips【持续更新】
- 如何查看计算机配置和名称,如何查看电脑本机配置和跑分
- 遨游3.0 RC 版公布
- php获取40001,php - Discord API错误#40001未经授权 - SO中文参考 - www.soinside.com
- 没人性!让我们这么早来上班
- 视网膜正常oct图_眼科经验贴:不同情况下的OCT读图
- dhl:指定的命名连接在配置中找不到、非计划用于 EntityClient 提供程序或者无效。...
- The Second Assignment
- 在vs2010 .net 4.0 引用dll .net 2.0(转)
- 深入浅出 NXLog (二)
- [笔记]vs2015 编写汇编masm32之使用MASM32库
- 创意撰写优化技巧通配符
- 深入浅出系列之——并查集详解【武侠版】【简单有趣】
- 穿越火线游戏服务器停服维护中,cf停机维护
- [Luogu P2057] 善意的投票
- Python 框架 之 Django MVT 下的 M 的 模型的简单介绍和使用
- 十大最佳DevOps工具
- 中医蒸来大健康,科技妙在有古方
- M103: Basic Cluster Administration chapter 1 The Mongod学习记录
热门文章
- 在电脑上安装了百度一键root工具后,启动adb提示:adb server version (31) doesn't match this client (36); killing...
- 微服务之spring Boot+MyBatis-Plus +mysql框架
- 什么是人工智能自动编程?它只是一个噱头吗?
- 移动电源哪个牌子的好,移动电源品牌排行
- 2×3卡方检验prism_卡方检验2python代码实现
- 爱奇艺体育与巴塞罗那足球俱乐部达成合作;中国机械工业百强、汽车工业整车二十强公布 | 美通企业日报...
- 敏之澳分享拼多多的宝贝标题要怎么写?
- 二十七、prometheus部署安装配置告警
- 香港云服务器比香港服务器更快吗?
- TOPCON/拓普康 SR-3AR分光辐射计