P2471 [SCOI2007] 降雨量 题解

news/2025/7/9 11:26:29/文章来源:https://www.cnblogs.com/FRZ29/p/18404380

题目传送门

分析

分讨题。

首先发现是 RMQ 问题(区间最值),可以用线段树或 ST 表来维护(代码为线段树 ,因为我忘记 ST 表怎么写了)。

然后发现有些年份不明确导致区间判断似乎不好搞。

但事实上只要判断下标差是否等于年份差即可得出该区间有无不明确年份。

其次考虑“必真”,“必假”,“有可能”三种结果的优先级。

稍微想想就会发现 \(\text{False} \gt \text{Maybe} \gt \text{True}\)

于是先考虑 \(\text{False}\)

  1. 如果 \(X\) 明确,且 \(Y + 1 \sim X - 1\) 区间内存在 \(Z, r_Z \ge r_X\)
  2. 如果 \(Y\) 明确,且 \(Y + 1 \sim X - 1\) 区间内存在 \(Z, r_Z \ge r_Y\)
  3. 如果 \(X, Y\) 明确,且 \(r_X \gt r_Y\)

然后考虑 \(\text{Maybe}\)(此时必然不满足上述条件)。

  1. 如果 \(X, Y\) 明确,且 \(Y + 1 \sim X - 1\) 区间内存在 \(Z\) 不明确。

  2. 如果 \(X\) 不明确。

  3. 如果 \(Y\) 不明确。

以上条件不满足的自然是 \(\text{True}\) 了。

点击查看代码
/*
--------------------------------
|        code by FRZ_29        |
|          code  time          |
|          2024/09/09          |
|           12:15:58           |
|            星期一             |
--------------------------------*/#include <iostream>
#include <climits>
#include <cstdio>
#include <ctime>using namespace std;void RD() {}
template<typename T, typename... U> void RD(T &x, U&... arg) {x = 0; int f = 1;char ch = getchar();while (ch < '0' || ch > '9') { if (ch == '-') f = -1; ch = getchar(); }while (ch >= '0' && ch <= '9') x = (x << 3) + (x << 1) + ch - '0', ch = getchar();x *= f; RD(arg...);
}const int N = 5e4 + 5;#define LS (rt << 1)
#define RS (rt << 1 | 1)
#define MID (l + r >> 1)
#define PRINT(x) cout << #x << " = " << x << "\n"
#define LF(i, __l, __r) for (int i = __l; i <= __r; i++)
#define RF(i, __r, __l) for (int i = __r; i >= __l; i--)int n, y[N], _r[N], Max[N << 2], m;void up(int rt) {Max[rt] = max(Max[LS], Max[RS]);
}void build(int rt, int l, int r) {if (l == r) {Max[rt] = _r[l];return;}build(LS, l, MID), build(RS, MID + 1, r);up(rt);
}int query(int rt, int l, int r, int L, int R) {if (L <= l && r <= R) return Max[rt];int ans = 0;if (MID >= L) ans = max(ans, query(LS, l, MID, L, R));if (MID < R) ans = max(ans, query(RS, MID + 1, r, L, R));return ans;
}int main() {freopen("read.in", "r", stdin);freopen("out.out", "w", stdout);
//    time_t st = clock();RD(n);LF(i, 1, n) RD(y[i], _r[i]);build(1, 1, n);RD(m);while (m--) {int X, Y, ans = 0; RD(X, Y);int st = lower_bound(y + 1, y + n + 1, X) - y,ed = lower_bound(y + 1, y + n + 1, Y) - y;bool is_st = y[st] == X, is_ed = y[ed] == Y;if (!is_st) st--;if (st + 1 <= ed - 1) ans = query(1, 1, n, st + 1, ed - 1);if ((ans >= _r[ed] && is_ed) || (ans >= _r[st] && is_st) || (_r[st] < _r[ed] && is_st && is_ed)) puts("false");else if ((ed - st != y[ed] - y[st] && is_ed && is_st) || !is_st || !is_ed) puts("maybe");else puts("true");}
//    printf("\n%dms", clock() - st)return 0;
}/* ps:FRZ弱爆了 */

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/794440.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大厂代码规范

在选择成为计算机类软件工程专业的学生后,我便与代码有了紧密的联系,在写代码的同时,每个人的习惯都不同,所以也会形成自己的代码特点,而通过在网络上查找资料,我也了解了一些大厂的代码规范。大厂代码规范可以提升代码质量,一致的代码风格、命名约定和编程习惯能够减少…

公安网络信息体系能力分类

来源:中国电子科学研究院学报,《公安网络信息体系顶层设计》

Squeak 语言和员工电脑监控软件的关联分析

在当今数字化办公的时代,员工电脑监控软件对于企业的管理起着至关重要的作用。它可以帮助企业确保数据安全、提高员工工作效率以及规范员工的工作行为。而 Squeak 语言,作为一种独特的编程语言,与员工电脑监控软件之间存在着紧密的关联。Squeak 语言是一种面向对象、动态类型…

轮胎充气压力 气压单位换算 All In One

轮胎充气压力 & 气压单位换算 All In One bar / psi 1 bar = 14.5 psi轮胎充气压力 & 气压单位换算 All In Onebar / psi气压单位换算 1 bar = 14.5 psi demos(🐞 反爬虫测试!打击盗版⚠️)如果你看到这个信息, 说明这是一篇剽窃的文章,请访问 https://www.cnblog…

OpenCV(cv::Mat::setTo())

目录1. 函数定义2. 示例3. 使用场景4. 性能5. 注意事项cv::Mat::setTo() 是 OpenCV 中用于将矩阵中的所有元素设置为一个给定的值。它可以应用于整个矩阵,也可以通过掩码 (mask) 仅对部分矩阵进行操作。这个函数常用于图像处理中的多种场景,例如图像填充、区域修改等。 1. 函…

【工具推荐】xxl-jobExploitGUI - xxl-job一键漏洞利用工具+一键getshll

工具介绍 xxl-jobExploitGUI实现了XXL-JOB默认accessToken权限绕过漏洞的单个检测、批量检测、一键反弹shell功能,后续会持续更新优化,添加POC检测等。 下载链接: 链接: https://pan.quark.cn/s/55ed00b1512d使用说明 单个检测批量检测 fofa语句: body="{\"code\…

电动自行车轮胎规格参数图解教程 All In One

电动自行车轮胎规格参数图解教程 All In One电动自行车轮胎规格参数图解教程 All In One电动车轮胎参数单位换算1 in / 1 英寸 => 2.54 cm / 2.54 厘米https://convertlive.com/zh/u/转换/英寸/自/厘米#10 轮胎参数 轮胎尺寸(英寸): 轮毂尺寸(英寸): 10in 轮胎宽度/断面宽度…

更换Linux系统镜像源

更换Linux系统镜像源 切换镜像源通常是为了提高软件包下载的速度和稳定性。以下是CentOS 7切换镜像源的一般步骤: 一、安装wget(如果尚未安装) 首先,需要确保系统中安装了wget工具,因为wget可以用来下载文件。如果系统中没有wget,可以通过以下命令安装: yum install -y …