题解:AT_abc386_d [ABC386D] Diagonal Separation
分析题面,发现题目求的是是否存在一个白点被 \((1, 1)\) 和任意一个黑点围成的矩形内。
先将所有黑点按 \(x\) 坐标排序。
枚举所有的白点。
找到所有横坐标不比该白点横坐标小的所有黑点的纵坐标的最大值所属点。
如果该点的纵坐标小于该白点的纵坐标:

(蓝点代表题目中的白点,红点反之)
此时满足题目要求,枚举下一个红点。
否则:

输出
No舍掉。
其余的输出 Yes。
以上的维护方法有很多,我的方法是二分、后缀最大值,可以参考一下。
#include <bits/stdc++.h>
// #define int long long
#define pii pair<int, int>
#define FRE(x) freopen(x ".in", "r", stdin), freopen(x ".out", "w", stdout)
#define ALL(x) x.begin(), x.end()
using namespace std;
int _test_ = 1;
const int N = 2e5 + 5;
int n, m, tb, tw, mx[N];
pii B[N], W[N]; // 黑白点
void init() {}
void clear() {}
void solve() {
cin >> n >> m;
for (int i = 1; i <= m; i++) {
int l, r;
char c;
cin >> l >> r >> c;
if (c == 'B') B[++tb] = {l, r};
else W[++tw] = {l, r};
}
sort(B + 1, B + tb + 1); // 排序
for (int i = tb; i >= 1; i--) {
mx[i] = max(mx[i + 1], B[i].second); // 后缀最大纵坐标
}
for (int i = 1; i <= tw; i++) { // 枚举白点
int t = lower_bound(B + 1, B + tb + 1, W[i]) - B; // 二分第一个不比该点横坐标小的点
if (mx[t] >= W[i].second) return cout << "No", void(); // 不合法就舍掉
}
cout << "Yes";
}
signed main() {
ios::sync_with_stdio(0);
cin.tie(0), cout.tie(0);
// cin >> _test_;
init();
while (_test_--) {
clear();
solve();
}
return 0;
}
题解:AT_abc386_d [ABC386D] Diagonal Separation的更多相关文章
- LeetCode All in One题解汇总(持续更新中...)
突然很想刷刷题,LeetCode是一个不错的选择,忽略了输入输出,更好的突出了算法,省去了不少时间. dalao们发现了任何错误,或是代码无法通过,或是有更好的解法,或是有任何疑问和建议的话,可以在对 ...
- Kickstart Round H 2019 Problem B. Diagonal Puzzle
有史以来打得最差的一次kickstart竟然发生在winter camp出结果前的最后一次ks = = 感觉自己的winter camp要凉了 究其原因,无非自己太眼高手低,好好做B, C的小数据,也 ...
- #448 div2 a Pizza Separation
A. Pizza Separation time limit per test1 second memory limit per test256 megabytes inputstandard inp ...
- Educational Codeforces Round 81 (Rated for Div. 2) 题解
过了n天补的题解:D AB就不用说了 C. Obtain The String 思路挺简单的,就是贪心,但是直接贪心的复杂度是O(|s|*|t|),会超时,所以需要用到序列自动机 虽然名字很高端但是就 ...
- HDU100题简要题解(2050~2059)
HDU2050 折线分割平面 题目链接 Problem Description 我们看到过很多直线分割平面的题目,今天的这个题目稍微有些变化,我们要求的是n条折线分割平面的最大数目.比如,一条折线可以 ...
- 论文翻译:2021_Semi-Blind Source Separation for Nonlinear Acoustic Echo Cancellation
论文地址:https://ieeexplore.ieee.org/abstract/document/9357975/ 基于半盲源分离的非线性回声消除 摘要: 当使用非线性自适应滤波器时,数值模型与实 ...
- 2016 华南师大ACM校赛 SCNUCPC 非官方题解
我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...
- noip2016十连测题解
以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...
- BZOJ-2561-最小生成树 题解(最小割)
2561: 最小生成树(题解) Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1628 Solved: 786 传送门:http://www.lyd ...
- Codeforces Round #353 (Div. 2) ABCDE 题解 python
Problems # Name A Infinite Sequence standard input/output 1 s, 256 MB x3509 B Restoring P ...
随机推荐
- mysql隐蔽的索引规则导致数据全表扫描
索引是为了加速数据的检索,但是不合理的表结构或适应不当则会起到反作用.我们在项目中就遇到过类似的问题,两个十万级别的数据表,在做连接查询的时候,查询时间达到了7000多秒还没有查出结果. 首先说明,关 ...
- chapter1 events and probability
第一章 事件和概率 1.1 Appication: verifying polynomial identities 1.2 Axioms of probability 1.3 Application ...
- ARC151D Binary Representations and Queries
ARC151D Binary Representations and Queries 题目链接:ARC151D Binary Representations and Queries 非常好思维题. 思 ...
- 如何使用Python编写一个Lisp解释器
原文出处: Peter Norvig 译文出处: jnjc(@jnjcc) 本文有两个目的: 一是讲述实现计算机语言解释器的通用方法,另外一点,着重展示如何使用Python来实现Lisp方言Sch ...
- golang之copier
今天我们要介绍的copier库就能处理不同类型之间的赋值.除此之外,copier还能: 调用同名方法为字段赋值: 以源对象字段为参数调用目标对象的方法,从而为目标对象赋值(当然也可以做其它的任何事情) ...
- Blazor 组件库 BootstrapBlazor 中Markdown组件介绍
组件介绍 Markdown组件是tui.editor的封装,所以所有内容均基于tui.editor. 默认状态下样子如下所示: 其代码如下: <Markdown Language="@ ...
- Codeforces Round 901 (Div
C. Jellyfish and Green Apple 题解 显然\(n \% m =0\),答案一定为\(0\) 如果\(n > m\),我们显然可以将\(n / m\)的苹果分给每个人,然 ...
- 使用Aurora在PPT中插入Latex公式
应用场景: (1) 在PPT中插入Latex公式 (2) 当点击PPT中的公式,出现提示 "无法找到 服务器应用程序.源文件.和项目,或返回的未知错误.请重新安装服务程序." 的时 ...
- HTML5 拖拽接口
1.首先,为了使元素可拖动,要先设置元素为可拖拽 方法:添加draggable属性,设置为 true 注意:链接和图像默认就支持拖拽,另外,如果一个元素中的文本被选中,那么这个元素和他的文本节点此时都 ...
- uni-app上下级页面数据双向通信
前情 最近在做小程序项目,选用是当前比较火的uniapp技术栈,经常会遇到页面间消息传递的需求. 为什么要这么做? uniapp页面间数据通信方式有很多:通过url传参,状态管理库vuex/pinia ...