原题链接.

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 一颗姜会长多高? (二分+前缀和+简单贪心)相关推荐

  1. P1083 借教室(标记永久化线段树/二分+前缀和)难度⭐⭐⭐★

    P1083 借教室 标记永久化线段树 很典型的区间修改问题,先输入赋值建树(这就是最典型的线段树呀,别忘了),然后修改 这里问的是是否有足够的空教室,所以线段树中 min 代表的是当前区间内最小的剩余 ...

  2. 卷进大厂系列之LeetCode刷题笔记:二分查找(简单)

    LeetCode刷题笔记:二分查找(简单) 学算法,刷力扣,加油卷,进大厂! 题目描述 涉及算法 题目解答 学算法,刷力扣,加油卷,进大厂! 题目描述 力扣题目链接 给定一个 n 个元素有序的(升序) ...

  3. POJ 3061 (二分+前缀和or尺取法)

    题目链接: http://poj.org/problem?id=3061 题目大意:找到最短的序列长度,使得序列元素和大于S. 解题思路: 两种思路. 一种是二分+前缀和.复杂度O(nlogn).有点 ...

  4. 【实数二分/前缀和维护】Best Cow Fences

    Poj 2018 Best Cow Fences 实数二分+前缀和维护 调了一晚上, 但发现没什么注意事项orz 无输出只因eps定义成了int型QAQ哭唧唧 #include<cstdio&g ...

  5. pcm输出还是源码输出_观看高清必备 如何简单实现源码输出

    目前不少蓝光当中都采用了多声道音轨,其中不乏DTS-MA或Dolby TrueHD格式的音频,如果使用多声道音箱外加源码输出的话能获得不俗的视听效果 观看高清必备 如何简单实现源码输出 [PChome ...

  6. corosync+pacemaker+drbd构建mysql高可用平台的简单案例

    写在前面:如果此文有幸被某位朋友看见并发现有错的地方,希望批评指正.如有不明白的地方,愿可一起探讨. 案例拓扑图 说明: ansible主机主要作用在于配置和安装两台corosync+pacemake ...

  7. [二分][前缀和]洛谷 P1083 借教室

    题意: 有n天,m个请求.n天内每天的可用教室为a_ia​i​​个,m个请求是从l到r天租借t个教室. 如果某一天的教室分配无法满足,则输出当前的订单号. 思考: 一开始根本没想到这个东西怎么二分.. ...

  8. 高通平台gpio简单调试

    版权声明:本文为博主原创文章,未经博主允许不得转载.    https://blog.csdn.net/u010164190/article/details/83860374 0.编译读写gpio寄存 ...

  9. (转载)hadoop2.2.0集群的HA高可靠的最简单配置

    转载网址:http://www.cnblogs.com/meiyuanbao/p/hadoop2.html 简介 hadoop中的NameNode好比是人的心脏,非常重要,绝对不可以停止工作.在had ...

最新文章

  1. python3 bytes和bytearray总结
  2. Python--一些重要的小tips【持续更新】
  3. 如何查看计算机配置和名称,如何查看电脑本机配置和跑分
  4. 遨游3.0 RC 版公布
  5. php获取40001,php - Discord API错误#40001未经授权 - SO中文参考 - www.soinside.com
  6. 没人性!让我们这么早来上班
  7. 视网膜正常oct图_眼科经验贴:不同情况下的OCT读图
  8. dhl:指定的命名连接在配置中找不到、非计划用于 EntityClient 提供程序或者无效。...
  9. The Second Assignment
  10. 在vs2010 .net 4.0 引用dll .net 2.0(转)
  11. 深入浅出 NXLog (二)
  12. [笔记]vs2015 编写汇编masm32之使用MASM32库
  13. 创意撰写优化技巧通配符
  14. 深入浅出系列之——并查集详解【武侠版】【简单有趣】
  15. 穿越火线游戏服务器停服维护中,cf停机维护
  16. [Luogu P2057] 善意的投票
  17. Python 框架 之 Django MVT 下的 M 的 模型的简单介绍和使用
  18. 十大最佳DevOps工具
  19. 中医蒸来大健康,科技妙在有古方
  20. M103: Basic Cluster Administration chapter 1 The Mongod学习记录

热门文章

  1. 在电脑上安装了百度一键root工具后,启动adb提示:adb server version (31) doesn't match this client (36); killing...
  2. 微服务之spring Boot+MyBatis-Plus +mysql框架
  3. 什么是人工智能自动编程?它只是一个噱头吗?
  4. 移动电源哪个牌子的好,移动电源品牌排行
  5. 2×3卡方检验prism_卡方检验2python代码实现
  6. 爱奇艺体育与巴塞罗那足球俱乐部达成合作;中国机械工业百强、汽车工业整车二十强公布 | 美通企业日报...
  7. 敏之澳分享拼多多的宝贝标题要怎么写?
  8. 二十七、prometheus部署安装配置告警
  9. 香港云服务器比香港服务器更快吗?
  10. TOPCON/拓普康 SR-3AR分光辐射计