洛谷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考加法和乘法标记的下放顺序,这道题更丧心病狂[?] 很多人可能跟我一样,刚看到这道题秒出思路:打一个当前最大值一个历史最大值不就完事 ...
随机推荐
- Service Mesh vs SideCar
Istio = 微服务框架 + 服务治理 Istio 大幅降低微服务架构下应用程序的开发难度,势必极大的推动微服务的普及.个人乐观估计,随着isito的成熟,微服务开发领域将迎来一次颠覆性的变革.后面 ...
- HDU 5188 背包
有N道题.要求得到最少W分 给出N道题的:每道题用时T.分数V,应在且必须在L时刻提交才干得分 问得到W分所用的最少的时间 以L-T排序,然后做01背包就可以 #include "stdio ...
- HDU 6044 Limited Permutation 读入挂+组合数学
Limited Permutation Problem Description As to a permutation p1,p2,⋯,pn from 1 to n, it is uncomplica ...
- C++文件IO操作的简单示例
CppIODemo1.cpp #include <iostream> #include <fstream> #include <chrono> #define IN ...
- thinkphp中的volist
在thinkphp中,使用volist一定要注意,<volist name='' id=''></volist>,name和id的变量一定要不一致,如果一致的话会导致当voli ...
- GUI界面资源
30个真棒的(免费iPhone,iPad IOS)的GUI 界面设计元素模板 做iphone开发的福音 创造力是指任何一种演示设计i的能力.无论是一个标志,旗帜,广告或一个完整的设计,能够注入的创 ...
- Delphi通过POST传递参数给PHP
Delphi代码 ******************************************************************************************* ...
- 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 ...
- hdu 1166 敌兵布阵 解题报告
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1166 题目意思:给出 N 个数你,通过对某些数进行更改(或者 + 或者 -),当输入的是 Query ...
- 深入浅出Oracle学习笔记:Undo
undo的作用是:解决oracle多用户读写一致性,以及操作可撤销或者回滚. 1.undo表空间是从10g开始进行自动管理的,几个参数如下: undo_management:回滚段手动管理还是自动管理 ...