第一种方法:可以二分最大天数订单的答案然后通过差分求一下是否可行。

  1. const int maxn = 1e6 + ;
  2. int n, m, a[maxn], ans;
  3. struct section {
  4. int cnt, l, r;
  5. }b[maxn];
  6. int c[maxn], sum[maxn];
  7.  
  8. inline bool ok(int now) {
  9. init(c, );
  10. rep(i, , now) {
  11. auto tmp = b[i];
  12. c[tmp.l] -= tmp.cnt;
  13. c[tmp.r + ] += tmp.cnt;
  14. }
  15. rep(i, , n) {
  16. sum[i] = sum[i - ] + c[i];
  17. if (sum[i] + a[i] < ) return false;
  18. }
  19. return true;
  20. }
  21.  
  22. int main() {
  23. read(n), read(m);
  24. rep(i, , n) read(a[i]);
  25. rep(i, , m) {
  26. read(b[i].cnt);
  27. read(b[i].l);
  28. read(b[i].r);
  29. }
  30.  
  31. int l = , r = m;
  32. while (l <= r) {
  33. int mid = (l + r) >> ;
  34. if (ok(mid)) {
  35. l = mid + ;
  36. } else {
  37. ans = mid;
  38. r = mid - ;
  39. }
  40. }
  41.  
  42. if (!ans) writeln();
  43. else {
  44. writeln(-);
  45. writeln(ans);
  46. }
  47. return ;
  48. }

第二种方法:无脑插一棵残缺的线段树板子即可:

  1. const int maxn = 1e6 + ;
  2. int n, m;
  3. struct Node {
  4. int l, r, minn, tag;
  5. }t[maxn << ];
  6. #define ls(p) p << 1
  7. #define rs(p) p << 1 | 1
  8.  
  9. void Build(int l, int r, int p) {
  10. t[p].l = l, t[p].r = r;
  11. if (l == r) {
  12. read(t[p].minn);
  13. t[p].tag = ;
  14. return;
  15. }
  16. int mid = (l + r) >> ;
  17. Build(l, mid, ls(p));
  18. Build(mid + , r, rs(p));
  19. t[p].minn = min(t[ls(p)].minn, t[rs(p)].minn);
  20. }
  21.  
  22. void Push_down(int p) {
  23. if (t[p].tag) {
  24. t[ls(p)].minn += t[p].tag;
  25. t[rs(p)].minn += t[p].tag;
  26. t[ls(p)].tag += t[p].tag;
  27. t[rs(p)].tag += t[p].tag;
  28. t[p].tag = ;
  29. }
  30. }
  31.  
  32. void Modify(int l, int r, int p, int k) {
  33. if (l <= t[p].l && t[p].r <= r) {
  34. t[p].minn += k;
  35. t[p].tag += k;
  36. return;
  37. }
  38. Push_down(p);
  39. int mid = (t[p].l + t[p].r) >> ;
  40. if (l <= mid) Modify(l, r, ls(p), k);
  41. if (mid < r) Modify(l, r, rs(p), k);
  42. t[p].minn = min(t[ls(p)].minn, t[rs(p)].minn);
  43. }
  44.  
  45. int main() {
  46. read(n), read(m);
  47. Build(, n, );
  48. rep(i, , m) {
  49. int cnt, l, r;
  50. read(cnt), read(l), read(r);
  51. Modify(l, r, , -cnt);
  52. if (t[].minn < ) {
  53. writeln(-);
  54. writeln(i);
  55. return ;
  56. }
  57. }
  58. writeln();
  59. return ;
  60. }

洛谷1083(差分+二分 or 线段树)的更多相关文章

  1. 洛谷 P3373 【模板】线段树 2

    洛谷 P3373 [模板]线段树 2 洛谷传送门 题目描述 如题,已知一个数列,你需要进行下面三种操作: 将某区间每一个数乘上 xx 将某区间每一个数加上 xx 求出某区间每一个数的和 输入格式 第一 ...

  2. 洛谷P4344 脑洞治疗仪 [SHOI2015] 线段树+二分答案/分块

    !!!一道巨恶心的数据结构题,做完当场爆炸:) 首先,如果你用位运算的时候不小心<<打成>>了,你就可以像我一样陷入疯狂的死循环改半个小时 然后,如果你改出来之后忘记把陷入死循 ...

  3. 洛谷$P2824\ [HEOI2016/TJOI2016]$ 排序 线段树+二分

    正解:线段树+二分 解题报告: 传送门$QwQ$ 昂着题好神噢我$jio$得$QwQQQQQ$,,, 开始看到长得很像之前考试题的亚子,,,然后仔细康康发现不一样昂$kk$,就这里范围是$[1,n]$ ...

  4. 洛谷P4891 序列(势能线段树)

    洛谷题目传送门 闲话 考场上一眼看出这是个毒瘤线段树准备杠题,发现实在太难调了,被各路神犇虐哭qwq 考后看到各种优雅的暴力AC......宝宝心里苦qwq 思路分析 题面里面是一堆乱七八糟的限制和性 ...

  5. 洛谷P3372 【模板】线段树 1

    P3372 [模板]线段树 1 153通过 525提交 题目提供者HansBug 标签 难度普及+/提高 提交  讨论  题解 最新讨论 [模板]线段树1(AAAAAAAAA- [模板]线段树1 洛谷 ...

  6. 洛谷 P2574 XOR的艺术(线段树 区间异或 区间求和)

    To 洛谷.2574 XOR的艺术 题目描述 AKN觉得第一题太水了,不屑于写第一题,所以他又玩起了新的游戏.在游戏中,他发现,这个游戏的伤害计算有一个规律,规律如下 1. 拥有一个伤害串为长度为n的 ...

  7. Bzoj5294/洛谷P4428 [Bjoi2018]二进制(线段树)

    题面 Bzoj 洛谷 题解 考虑一个什么样的区间满足重组之后可以变成\(3\)的倍数.不妨设\(tot\)为一个区间内\(1\)的个数.如果\(tot\)是个偶数,则这个区间一定是\(3\)的倍数,接 ...

  8. 【题解】洛谷P1198 [JSOI2008] 最大数(线段树)

    洛谷P1198:https://www.luogu.org/problemnew/show/P1198 思路 一道水水的线段树 20分钟A掉 这道题只涉及到单点修改和区间查询 所以这道题甚至不用Laz ...

  9. bzoj3064/洛谷P4314 CPU监控【线段树】

    好,长草博客被催更了[?] 我感觉这题完全可以当作线段树3 线段树2考加法和乘法标记的下放顺序,这道题更丧心病狂[?] 很多人可能跟我一样,刚看到这道题秒出思路:打一个当前最大值一个历史最大值不就完事 ...

随机推荐

  1. Service Mesh vs SideCar

    Istio = 微服务框架 + 服务治理 Istio 大幅降低微服务架构下应用程序的开发难度,势必极大的推动微服务的普及.个人乐观估计,随着isito的成熟,微服务开发领域将迎来一次颠覆性的变革.后面 ...

  2. HDU 5188 背包

    有N道题.要求得到最少W分 给出N道题的:每道题用时T.分数V,应在且必须在L时刻提交才干得分 问得到W分所用的最少的时间 以L-T排序,然后做01背包就可以 #include "stdio ...

  3. HDU 6044 Limited Permutation 读入挂+组合数学

    Limited Permutation Problem Description As to a permutation p1,p2,⋯,pn from 1 to n, it is uncomplica ...

  4. C++文件IO操作的简单示例

    CppIODemo1.cpp #include <iostream> #include <fstream> #include <chrono> #define IN ...

  5. thinkphp中的volist

    在thinkphp中,使用volist一定要注意,<volist name='' id=''></volist>,name和id的变量一定要不一致,如果一致的话会导致当voli ...

  6. GUI界面资源

    30个真棒的(免费iPhone,iPad IOS)的GUI 界面设计元素模板 做iphone开发的福音   创造力是指任何一种演示设计i的能力.无论是一个标志,旗帜,广告或一个完整的设计,能够注入的创 ...

  7. Delphi通过POST传递参数给PHP

    Delphi代码 ******************************************************************************************* ...

  8. Codeforces Round #106 (Div. 2) D. Coloring Brackets —— 区间DP

    题目链接:https://vjudge.net/problem/CodeForces-149D D. Coloring Brackets time limit per test 2 seconds m ...

  9. hdu 1166 敌兵布阵 解题报告

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1166 题目意思:给出 N 个数你,通过对某些数进行更改(或者 + 或者 -),当输入的是 Query ...

  10. 深入浅出Oracle学习笔记:Undo

    undo的作用是:解决oracle多用户读写一致性,以及操作可撤销或者回滚. 1.undo表空间是从10g开始进行自动管理的,几个参数如下: undo_management:回滚段手动管理还是自动管理 ...