P1873 砍树(二分查找模板)

简介: P1873 砍树(二分查找模板)

题目描述



伐木工人米尔科需要砍倒 MM 米长的木材。这是一个对米尔科来说很容易的工作,因为他有一个漂亮的新伐木机,可以像野火一样砍倒森林。


米尔科的伐木机工作过程如下:米尔科设置一个高度参数 HH(米),伐木机升起一个巨大的锯片到高度 HH,并锯掉所有的树比 HH 高的部分(当然,树木不高于 HH 米的部分保持不变)。米尔科就得到树木被锯下的部分。


例如,如果一行树的高度分别为2020,1515,1010 和1717,米尔科把锯片升到 1515 米的高度,切割后树木剩下的高度将是1515,1515,1010 和 1515,而米尔科将从第 11 棵树得到 55 米,从第 44 棵树得到 22 米,共得到 77 米木材。


米尔科非常关注生态保护,所以他不会砍掉过多的木材。这正是他为什么尽可能高地设定伐木机锯片的原因。帮助米尔科找到伐木机锯片的最大的整数高度 HH,使得他能得到木材至少为 MM米。换句话说,如果再升高 11 米,则他将得不到 MM 米木材。


输入格式



第11行 22 个整数 NN 和 MM,NN表示树木的数量,MM 表示需要的木材总长度。

第22行 NN 个整数表示每棵树的高度。


输出格式



11 个整数,表示砍树的最高高度。


输入输出样例



输入 #1复制

5 20

4 42 40 26 46


输出 #1复制

36


说明/提示



1\leq N\leq10^61≤N≤106,1\leq M\leq 2\times10^91≤M≤2×109,每棵树的高度\lt10^9<109,所有木材长度值和\gt M>M。

#include<bits/stdc++.h>
using namespace std;
#define ll long long
const ll maxn=1e6+6;
 ll a[maxn];
int main()
{
  ll n,m;ll l;ll r;ll maxnn ;ll mid; ll ans;
  cin>>n>>m;
  for(ll i=1;i<=n;i++)
  {   
    cin>>a[i];
    maxnn=max(maxnn,a[i]);
  }
  l=0;r=maxnn;
  while(l+1<r)
  {
    mid=(l+r)>>1;
      ans=0;
    for(ll i=1;i<=n;i++)
    { 
      if(a[i]>mid)
      ans=ans+a[i]-mid;
    }
    if(ans>=m)
      l=mid;//因为这个越大,mid越大,ans就越少 
      else
      r=mid;
  }
  cout<<l; 
}





相关文章
|
NoSQL 编译器 Linux
CodeBlocks-20.03下载安装及中文教程
CodeBlocks强大之处 1、跨平台,windows、linux 、mac都可以用 2、轻量化,远不及VS占用空间 3、完全免费
3417 1
CodeBlocks-20.03下载安装及中文教程
|
10月前
|
SQL 缓存 Java
【吐血整理】MyBatis从入门到精通
本文介绍了 MyBatis 的使用指南,涵盖开发环境搭建、基础操作实例和进阶特性。首先,详细描述了 JDK 和 IDE 的安装及依赖引入,确保项目顺利运行。接着,通过创建用户表和实体类,演示了 CRUD 操作的全流程,包括查询、插入、更新和删除。最后,深入探讨了动态 SQL 和缓存机制等高级功能,帮助开发者提升数据库交互效率和代码灵活性。掌握这些内容,能显著提高 Java 编程中的数据库操作能力。
1259 4
|
C语言
【C 言专栏】C 语言中的错误处理机制
【5月更文挑战第3天】本文探讨了C语言中的错误处理机制,涵盖错误类型(语法和运行时错误)、基本处理方法(返回值、全局变量和自定义异常)及常见策略(检查返回值、设置标志位和记录错误信息)。还介绍了perror和strerror函数,并强调自定义错误处理函数的重要性。注意不要忽略错误,保持处理一致性,避免过度处理。通过实例说明错误处理在文件操作和网络编程中的关键作用。错误处理是提升程序稳定性和可靠性的必备技能,需要在实践中不断学习和完善。
597 4
|
关系型数据库 MySQL
Mysql基础第二十七天,使用游标
Mysql基础第二十七天,使用游标
76 0
Mysql基础第二十七天,使用游标
|
SQL Java 数据库连接
MyBatis-Plus详细介绍
MyBatis-Plus是基于MyBatis框架的增强工具,致力于简化MyBatis的开发。它提供了一系列的增强功能,包括代码生成器、分页查询、性能分析等,大大提高了开发效率。
227 0
|
机器学习/深度学习 人工智能 自然语言处理
国内唯一!阿里云机器学习平台PAI同时入选Gartner两项权威报告
日前,国际权威研究机构 Gartner 连续发布两份 AI 领域研究报告,阿里云机器学习平台 PAI 蝉联上榜。
国内唯一!阿里云机器学习平台PAI同时入选Gartner两项权威报告
|
缓存 架构师 数据库
2022软考系统架构师倒计时第6天
2022软考系统架构师考试
538 0
2022软考系统架构师倒计时第6天
|
存储 Linux 云计算
Linux云计算——磁盘和文件系统管理(二)
Linux云计算——磁盘和文件系统管理(二)
238 0
|
存储 缓存 Java
Android 数据存储(一)-文件存储
一、数据存储概念 Android系统提供了提供了多种保存应用数据的选项: 文件存储: 应用程序专属文件存储: 内部存储(保存其他应用不应访问的敏感信息) 共享文件存储:存储你的应用打算与其他应用共享的文件,包括媒体、文档和其他文件。 Preferences:默认情况下,Preferences 使用 SharedPreferences 来保存值。 数据库:使用 Room 持久性库将结构化数据存储在私有数据库中。 瞬时数据:是指那些存储在内存当中,有可能会因为程序关闭或其他原因导致内存被回收而丢失的数据。
716 0
Android 数据存储(一)-文件存储
|
机器学习/深度学习 自然语言处理 算法
自监督这么热,快抓紧时间上车:基于 Pretext Task 的自监督学习
自监督学习有一个非常强的动机:目前,大部分神经网络的训练仍然使用的是有监督范式,需要耗费大量的标注数据,标注这些数据是非常耗时费力的。而自监督的提出就是为了打破对人工标注的依赖,即使在没有标注数据的情况下,也可以高效地训练网络。众所周知,神经网络的训练需要任务来进行驱动,所以自监督学习的核心就是来合理构造有利于模型学习的任务。
569 0
自监督这么热,快抓紧时间上车:基于 Pretext Task 的自监督学习