题目链接:http://codeforces.com/contest/460/problem/C

题意: n盆花,浇k次水, 每次可使花高度 + 1, 每次可浇相邻的w盆,ai 表示 i-th盆花 的高度 问:当浇完m次后,最矮的一盆花最高可以使多少?

解题思路: 二分 + 扫描线, 由于高度最高10e9 + 10e5 ,最小1, 然后在 这范围内二分搜索。

这道题主要的还是check,  怎样检查 浇完后是否能达到高度 h。 用树状数组或线段树 自然可以, 复杂度: 建树(nlogn ) + 点查询(nlogn)。 不过还有种更小巧精悍的方法: 扫描线(n)。

例如在【0,2),【1,3)范围内分别 + 1, 可以先f[0] += 1, f[2] -= 1, f[1] += 1, f[3] -= 1,f: 1,1,-1,-1, 计算结果是,从左完后加: 1, 1 +1,1+1-1,1+1-1-1.

 1 /***Good Luck***/
 2 // 二分 + 扫描线
 3 #define _CRT_SECURE_NO_WARNINGS
 4 #include <iostream>
 5 #include <cstdio>
 6 #include <cstdlib>
 7 #include <cstring>
 8 #include <string>
 9 #include <algorithm>
10 #include <stack>
11 #include <map>
12 #include <queue>
13 #include <vector>
14 #include <set>
15 #include <functional>
16 #include <cmath>
17
18 #define Zero(a) memset(a, 0, sizeof(a))
19 #define Neg(a)  memset(a, -1, sizeof(a))
20 #define All(a) a.begin(), a.end()
21 #define PB push_back
22 #define inf 0x3f3f3f3f
23 #define inf2 0x7fffffffffffffff
24 #define ll long long
25 using namespace std;
26 //#pragma comment(linker, "/STACK:102400000,102400000")
27 const int maxn = 100005;
28 int arr[maxn];
29 int f[maxn + maxn];
30 int n, m, w;
31
32 bool check(int mnh) {
33     Zero(f);
34     int tmpm = m;
35     for (int i = 1; i <= n; ++i) {// 扫描线
36         f[i] = f[i] + f[i - 1];
37         int d = max(0, mnh - arr[i] - f[i]);
38         tmpm -= d;
39         f[i] += d;
40         f[i + w] -= d;
41         if (tmpm < 0) return false;
42     }
43     return true;
44 }
45
46 void solve() {
47     int l = 0, r = 1000000000 + maxn;
48     int mid;
49     while (l < r) {
50         mid = (l + r + 1) >> 1;
51         if (check(mid)) {
52             l = mid ;
53         } else {
54             r = mid - 1;
55         }
56     }
57     cout << r  << endl;
58 }
59 int main() {
60     //freopen("data.out", "w", stdout);
61     //freopen("data.in", "r", stdin);
62     cin.sync_with_stdio(false);
63     cin >> n >> m >> w;
64     for (int i = 1; i <= n; ++i)
65         cin >> arr[i];
66     solve();
67     return 0;
68 }

转载于:https://www.cnblogs.com/yeahpeng/p/3927972.html

C. Present(二分 + 扫描线)相关推荐

  1. HDU 4747 Mex【线段树上二分+扫描线】

    [题意概述] 一个区间的Mex为这个区间没有出现过的最小自然数,现在给你一个序列,要求求出所有区间的Mex的和. [题解] 扫描线+线段树. 我们在线段树上维护从当前左端点开始的前缀Mex,显然从左到 ...

  2. 【BZOJ3958】[WF2011]Mummy Madness 二分+扫描线+线段树

    [BZOJ3958][WF2011]Mummy Madness Description 在2011年ACM-ICPC World Finals上的一次游览中,你碰到了一个埃及古墓. 不幸的是,你打开了 ...

  3. 单调栈 or 线段树扫描线 ---- E. Delete a Segment [单调栈+二分] [扫描线处理空白位置的技巧乘2]

    题目链接 题目大意: 给出nnn个线段代表集合,现在问若可以将其中任意一个线段删除,则能够形成最多多少个独立的集合(取并集后) 解题思路1: 首先我们先对线段按照起点排序 那么我们枚举删除的线段iii ...

  4. 扫描线+线段树简介 AcWing 248窗内的星星题解

    ----出自南昌理工学院ACM集训队 这周学习了线段树和扫描线的解题方法,下面由小菜鸡简介一下: 一般扫描线的题目最简单的便是扫描线裸模板(一般来说的话:数据范围小),其次的话便是进行拓展成线段树+扫 ...

  5. ACM计算几何题目推荐

    //第一期 计算几何题的特点与做题要领: 1.大部分不会很难,少部分题目思路很巧妙 2.做计算几何题目,模板很重要,模板必须高度可靠. 3.要注意代码的组织,因为计算几何的题目很容易上两百行代码,里面 ...

  6. POJ 计算几何入门题目推荐

      其实也谈不上推荐,只是自己做过的题目而已,甚至有的题目尚未AC,让在挣扎中.之所以推荐计算几何题,是因为,本人感觉ACM各种算法中计算几何算是比较实际的算法,在很多领域有着重要的用途(例如本人的专 ...

  7. 计算几何相关资料+题目推荐(不定期补充)

    旋转卡壳:http://blog.csdn.net/accry/article/details/6070626 计算几何题目推荐:http://blog.csdn.net/accry/article/ ...

  8. 计算几何问题 java_【转载】ACM计算几何题目推荐

    2107    Quoit Design    典型最近点对问题 POJ    3714    Raid    变种最近点对问题 B,最小包围圆 最小包围圆的算法是一种增量算法,期望是O(n). ZO ...

  9. poj计算几何题推荐

    POJ 计算几何入门题目推荐(转)       其实也谈不上推荐,只是自己做过的题目而已,甚至有的题目尚未AC,让在挣扎中.之所以推荐计算几何题,是因为,本人感觉ACM各种算法中计算几何算是比较实际的 ...

  10. acm 计算几何题目集合

    //第一期 计算几何题的特点与做题要领: 1.大部分不会很难,少部分题目思路很巧妙 2.做计算几何题目,模板很重要,模板必须高度可靠. 3.要注意代码的组织,因为计算几何的题目很容易上两百行代码,里面 ...

最新文章

  1. Delphi中的消息截获
  2. Security 登录认证流程详细分析 源码与图相结合
  3. python自动控制生产线输送线_一个关于自动化装配生产线结构组成案例,易懂干货...
  4. 中国电信与华为签物联网合作协议
  5. JS 获取浏览器窗口大小
  6. matlibplot 一张图画多个曲线_从一张风景照中就学会的SinGAN模型,究竟是什么神操作?| ICCV 2019最佳论文...
  7. 为同一个元素绑定多个不同的事件,并指向相同的事件处理函数方法
  8. Spring MVC学习总结(18)——SpringMVC事务Transactional注解使用总结
  9. java商品名称_Java统计商品信息
  10. Cesium源码剖析---Post Processing之物体描边(Silhouette)
  11. 拓端tecdat|R语言有限混合模型聚类FMM、广义线性回归模型GLM混合应用分析威士忌市场和研究专利申请、支出数据
  12. python通过GUI 界面搭建实现嵌套功能_搭建系统|升级基于财务数据的选股工具!从清单中剔除ST股和次新股...
  13. TCP报文段中的序号和确认号
  14. vb.net的socket编程
  15. 资源网站(电驴替代方案)
  16. 运放参数的详细解释和分析-part1-输入偏置电流和输入失调电流
  17. SageMath | Crypto Tool
  18. 山东农业大学计算机复试,山东农业大学复试录取分数线
  19. 好玩游戏不上学去学计算机,如果你这样学习,不如去玩游戏!
  20. 什么是JS面向对象?

热门文章

  1. Es-nested嵌入式属性
  2. FFmpeg再学习 -- Windows下安装说明
  3. C语言再学习-- readelf、objdump、nm使用详解
  4. Android PC投屏简单尝试—最终章1
  5. 深入了解以太坊虚拟机第3部分——动态数据类型的表示方法
  6. 彻底弄懂dalvik字节码【一】
  7. Android 4.4 MediaRecorder系统结构
  8. AndFix解析——(上)
  9. SNMP模型中,网管者、网管代理、网管协议及管理信息库MIB之间的工作流程
  10. JZOJ 5933. 【NOIP2018模拟10.27】百鸽笼