洛谷1083(差分+二分 or 线段树)
第一种方法:可以二分最大天数订单的答案然后通过差分求一下是否可行。
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 线段树)的更多相关文章
- 洛谷 P3373 【模板】线段树 2
洛谷 P3373 [模板]线段树 2 洛谷传送门 题目描述 如题,已知一个数列,你需要进行下面三种操作: 将某区间每一个数乘上 xx 将某区间每一个数加上 xx 求出某区间每一个数的和 输入格式 第一 ...
- 洛谷P4344 脑洞治疗仪 [SHOI2015] 线段树+二分答案/分块
!!!一道巨恶心的数据结构题,做完当场爆炸:) 首先,如果你用位运算的时候不小心<<打成>>了,你就可以像我一样陷入疯狂的死循环改半个小时 然后,如果你改出来之后忘记把陷入死循 ...
- 洛谷$P2824\ [HEOI2016/TJOI2016]$ 排序 线段树+二分
正解:线段树+二分 解题报告: 传送门$QwQ$ 昂着题好神噢我$jio$得$QwQQQQQ$,,, 开始看到长得很像之前考试题的亚子,,,然后仔细康康发现不一样昂$kk$,就这里范围是$[1,n]$ ...
- 洛谷P4891 序列(势能线段树)
洛谷题目传送门 闲话 考场上一眼看出这是个毒瘤线段树准备杠题,发现实在太难调了,被各路神犇虐哭qwq 考后看到各种优雅的暴力AC......宝宝心里苦qwq 思路分析 题面里面是一堆乱七八糟的限制和性 ...
- 洛谷P3372 【模板】线段树 1
P3372 [模板]线段树 1 153通过 525提交 题目提供者HansBug 标签 难度普及+/提高 提交 讨论 题解 最新讨论 [模板]线段树1(AAAAAAAAA- [模板]线段树1 洛谷 ...
- 洛谷 P2574 XOR的艺术(线段树 区间异或 区间求和)
To 洛谷.2574 XOR的艺术 题目描述 AKN觉得第一题太水了,不屑于写第一题,所以他又玩起了新的游戏.在游戏中,他发现,这个游戏的伤害计算有一个规律,规律如下 1. 拥有一个伤害串为长度为n的 ...
- Bzoj5294/洛谷P4428 [Bjoi2018]二进制(线段树)
题面 Bzoj 洛谷 题解 考虑一个什么样的区间满足重组之后可以变成\(3\)的倍数.不妨设\(tot\)为一个区间内\(1\)的个数.如果\(tot\)是个偶数,则这个区间一定是\(3\)的倍数,接 ...
- 【题解】洛谷P1198 [JSOI2008] 最大数(线段树)
洛谷P1198:https://www.luogu.org/problemnew/show/P1198 思路 一道水水的线段树 20分钟A掉 这道题只涉及到单点修改和区间查询 所以这道题甚至不用Laz ...
- bzoj3064/洛谷P4314 CPU监控【线段树】
好,长草博客被催更了[?] 我感觉这题完全可以当作线段树3 线段树2考加法和乘法标记的下放顺序,这道题更丧心病狂[?] 很多人可能跟我一样,刚看到这道题秒出思路:打一个当前最大值一个历史最大值不就完事 ...
随机推荐
- ubuntu搭建samba服务器
一.为什么要用Samba? Samba的主要任务就是实现Linux系统和Windows系统之间的资源共享. 二.需要的软件? 我是在ubuntu上实现的,所以我只需在配置好ubuntu的更 ...
- c#生成PDF准考证
项目中需要做一个生成PDF准考证的功能,在这里跟大家分享一下思路.. 1.首先是下载Adobe Acrobat 9 Pro,安装破解(高版本的貌似破解,不了,自带正版意识的略过..随意下载) 2.新建 ...
- sanic官方文档解析之ssl,debug mode模式和test(测试)
1,ssl 示例: 可选择的SSLContent from sanic import Sanic import ssl context = ssl.create_default_context(pur ...
- swt进度条 线程
import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; import java.util.Rando ...
- java map 装入list
需要生成多组数据的时候,应将map时候放入循环,否则循环出来会一直覆盖之前的,只能保存一条数据. 具体如下: if (rs.next()) { do { Map<String, String&g ...
- Hadoop MapReduce输入输出类型
一.输入格式 1.输入分片split 一个分片对应一个map任务: 一个分片包含一个表(整个文件)上的若干行,而一条记录(单行)对应一行: 分片包含一个以字节为单位的长度 和 一组存储位置,分片不包含 ...
- react native 之页面布局
第一章 flexbox 布局 1.flexDirection:'row', 水平 flexDirection:'column',垂直 需要在父元素上设置这种属性才能实现flex. flex:1 会撑 ...
- hihocoder #1039 : 字符消除 ( 字符串处理类 ) 好久之前做的题目,具体的算法代码中阅读吧
#1039 : 字符消除 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi最近在玩一个字符消除游戏.给定一个只包含大写字母"ABC"的字符串s,消 ...
- YTU 2419: C语言习题 等长字符串排序
2419: C语言习题 等长字符串排序 时间限制: 1 Sec 内存限制: 128 MB 提交: 650 解决: 249 题目描述 在主函数中输入n(n<=10)个等长的字符串.用另一函数对 ...
- SpringBoot发送简单文本邮件
1.pom.xml添加 spring-boot-starter-mail 依赖 <dependency> <groupId>org.springframework.boot&l ...