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

 const int maxn = 1e6 + ;
int n, m, a[maxn], ans;
struct section {
int cnt, l, r;
}b[maxn];
int c[maxn], sum[maxn]; inline bool ok(int now) {
init(c, );
rep(i, , now) {
auto tmp = b[i];
c[tmp.l] -= tmp.cnt;
c[tmp.r + ] += tmp.cnt;
}
rep(i, , n) {
sum[i] = sum[i - ] + c[i];
if (sum[i] + a[i] < ) return false;
}
return true;
} int main() {
read(n), read(m);
rep(i, , n) read(a[i]);
rep(i, , m) {
read(b[i].cnt);
read(b[i].l);
read(b[i].r);
} int l = , r = m;
while (l <= r) {
int mid = (l + r) >> ;
if (ok(mid)) {
l = mid + ;
} else {
ans = mid;
r = mid - ;
}
} if (!ans) writeln();
else {
writeln(-);
writeln(ans);
}
return ;
}

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

 const int maxn = 1e6 + ;
int n, m;
struct Node {
int l, r, minn, tag;
}t[maxn << ];
#define ls(p) p << 1
#define rs(p) p << 1 | 1 void Build(int l, int r, int p) {
t[p].l = l, t[p].r = r;
if (l == r) {
read(t[p].minn);
t[p].tag = ;
return;
}
int mid = (l + r) >> ;
Build(l, mid, ls(p));
Build(mid + , r, rs(p));
t[p].minn = min(t[ls(p)].minn, t[rs(p)].minn);
} void Push_down(int p) {
if (t[p].tag) {
t[ls(p)].minn += t[p].tag;
t[rs(p)].minn += t[p].tag;
t[ls(p)].tag += t[p].tag;
t[rs(p)].tag += t[p].tag;
t[p].tag = ;
}
} void Modify(int l, int r, int p, int k) {
if (l <= t[p].l && t[p].r <= r) {
t[p].minn += k;
t[p].tag += k;
return;
}
Push_down(p);
int mid = (t[p].l + t[p].r) >> ;
if (l <= mid) Modify(l, r, ls(p), k);
if (mid < r) Modify(l, r, rs(p), k);
t[p].minn = min(t[ls(p)].minn, t[rs(p)].minn);
} int main() {
read(n), read(m);
Build(, n, );
rep(i, , m) {
int cnt, l, r;
read(cnt), read(l), read(r);
Modify(l, r, , -cnt);
if (t[].minn < ) {
writeln(-);
writeln(i);
return ;
}
}
writeln();
return ;
}

洛谷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. ubuntu搭建samba服务器

    一.为什么要用Samba?     Samba的主要任务就是实现Linux系统和Windows系统之间的资源共享.   二.需要的软件? 我是在ubuntu上实现的,所以我只需在配置好ubuntu的更 ...

  2. c#生成PDF准考证

    项目中需要做一个生成PDF准考证的功能,在这里跟大家分享一下思路.. 1.首先是下载Adobe Acrobat 9 Pro,安装破解(高版本的貌似破解,不了,自带正版意识的略过..随意下载) 2.新建 ...

  3. sanic官方文档解析之ssl,debug mode模式和test(测试)

    1,ssl 示例: 可选择的SSLContent from sanic import Sanic import ssl context = ssl.create_default_context(pur ...

  4. swt进度条 线程

    import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; import java.util.Rando ...

  5. java map 装入list

    需要生成多组数据的时候,应将map时候放入循环,否则循环出来会一直覆盖之前的,只能保存一条数据. 具体如下: if (rs.next()) { do { Map<String, String&g ...

  6. Hadoop MapReduce输入输出类型

    一.输入格式 1.输入分片split 一个分片对应一个map任务: 一个分片包含一个表(整个文件)上的若干行,而一条记录(单行)对应一行: 分片包含一个以字节为单位的长度 和 一组存储位置,分片不包含 ...

  7. react native 之页面布局

     第一章 flexbox 布局 1.flexDirection:'row', 水平 flexDirection:'column',垂直 需要在父元素上设置这种属性才能实现flex. flex:1 会撑 ...

  8. hihocoder #1039 : 字符消除 ( 字符串处理类 ) 好久之前做的题目,具体的算法代码中阅读吧

    #1039 : 字符消除 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi最近在玩一个字符消除游戏.给定一个只包含大写字母"ABC"的字符串s,消 ...

  9. YTU 2419: C语言习题 等长字符串排序

    2419: C语言习题 等长字符串排序 时间限制: 1 Sec  内存限制: 128 MB 提交: 650  解决: 249 题目描述 在主函数中输入n(n<=10)个等长的字符串.用另一函数对 ...

  10. SpringBoot发送简单文本邮件

    1.pom.xml添加 spring-boot-starter-mail 依赖 <dependency> <groupId>org.springframework.boot&l ...