当前位置: 首页 > news >正文

最长的白色段

这道题目是一道经典的区间染色问题。虽然数轴范围高达 \(10^9\),但由于染色操作次数 \(N\) 较小(最大 5000),我们可以通过坐标离散化动态维护区间的方法来解决。


解题思路

  1. 离散化 (Discretization)

    数轴范围巨大,但 \(N\) 次操作涉及的端点最多只有 \(2N = 10,000\) 个。我们将所有涉及到的 \(a_i\)\(b_i\) 收集起来,从小到大排序并去重,形成一系列相互连接的小区间。

  2. 区间状态维护

    离散化后,原本连续的数轴被切成了若干个“原子区间”。我们可以用一个数组来记录每个区间的颜色。

  3. 模拟染色

    遍历每一次输入,将对应范围内的“原子区间”标记为白色或黑色。

  4. 合并与统计

    染色结束后,遍历所有区间,将连续的白色区间合并,记录长度最大且起始点最小的那一段。


C++ 实现代码

#include <iostream>
#include <vector>
#include <algorithm>
#include <map>using namespace std;struct Query {int l, r;char color;
};int main() {int N;if (!(cin >> N)) return 0;vector<Query> ops(N);vector<int> coords;// 初始区间端点,题目范围是 0 到 10^9coords.push_back(0);coords.push_back(1000000000);for (int i = 0; i < N; ++i) {cin >> ops[i].l >> ops[i].r >> ops[i].color;coords.push_back(ops[i].l);coords.push_back(ops[i].r);}// 1. 离散化:排序并去重sort(coords.begin(), coords.end());coords.erase(unique(coords.begin(), coords.end()), coords.end());// 2. 初始化颜色:0表示黑色,1表示白色。初始全为白色。// 离散化后 m 个点产生 m-1 个区间int m = coords.size();vector<int> color(m, 1);// 3. 模拟染色过程for (int i = 0; i < N; ++i) {// 找到当前操作在离散化数组中的下标int L = lower_bound(coords.begin(), coords.end(), ops[i].l) - coords.begin();int R = lower_bound(coords.begin(), coords.end(), ops[i].r) - coords.begin();int c = (ops[i].color == 'w' ? 1 : 0);for (int j = L; j < R; ++j) {color[j] = c;}}// 4. 统计最长白色段int max_len = -1;int ans_l = 0, ans_r = 0;int cur_l = -1;for (int i = 0; i < m; ++i) {if (i < m - 1 && color[i] == 1) {if (cur_l == -1) cur_l = coords[i]; // 记录段起点} else {if (cur_l != -1) {int cur_r = coords[i]; // 记录段终点int len = cur_r - cur_l;if (len > max_len) {max_len = len;ans_l = cur_l;ans_r = cur_r;}cur_l = -1;}}}if (max_len == -1) return 0;cout << ans_l << " " << ans_r << endl;return 0;
}

关键点拨

  • 离散化原理

    假设有两个操作 \([10, 20]\)\([15, 30]\)。端点集合为 \(\{10, 15, 20, 30\}\)。这会产生三个区间:\([10, 15]\)\([15, 20]\)\([20, 30]\)。通过操作下标,我们可以精准地控制这些小区间的状态。

  • 复杂度分析

    • 排序与去重:\(O(N \log N)\)
    • 染色操作:\(O(N^2)\)(最坏情况下每次都要遍历所有原子区间)
    • 鉴于 \(N=5000\)\(N^2\) 约为 \(2.5 \times 10^7\),在 1 秒的限时内完全可以跑通。
  • 边界处理

    注意题目中数轴范围到 \(10^9\),但在初始时全为白色,因此默认把 \(0\)\(10^9\) 加入坐标集合。

http://www.jsqmd.com/news/318169/

相关文章:

  • 【vtkPolyDataPointSampler 】——多边形数据点采样技术详解
  • 四川市场调查优质机构推荐榜:成都找人公司电话/成都找人电话/找人电话/四川市场调查公司电话/四川市场调查电话/四川找人公司/选择指南
  • 2026年高铁广告公司哪家好:五大专业优质高铁广告公司权威盘点
  • Tailwind CSS
  • 【Global ID概念】——vtkGenerateGlobalIds应用详解
  • 2026年植发厉害/靠谱/专业/技术好/评价高/副作用少的医生推荐口碑榜 加密种植/术后无痕/快速恢复
  • 国资委46号令落地:穿透式监管如何重塑央企合同治理逻辑
  • AI率从85%降到10%!DeepSeek四大降AI指令+3款保命神器实测(2026最新)
  • 实验室气体管路安装改造服务公司哪家好?推荐行业内知名的服务商
  • QLoRA技术详解,单GPU微调650亿参数模型,性能媲美ChatGPT
  • 适配刘海
  • 2026年 四氟乙烯板/棒/密封件/异形件/垫片/管厂家推荐榜单:耐腐蚀高耐磨氟塑料制品源头实力工厂精选
  • 2026 年 1 月过滤材料厂家推荐排行榜,过滤布/过滤棉/过滤纸/过滤器/过滤袋/鱼缸过滤棉/顶棚过滤棉/初效过滤棉/空气过滤棉/阻燃过滤棉,高效净化与专业定制之选
  • 【标注优化】标签清洗选择方案汇总 提升训练效果
  • 2026年安徽可靠徽菜店TOP5品牌推荐
  • RK3566 上运行 YOLOv8 Detection:INT8 性能、精度与可行性判断
  • 2026年可靠商业调查服务机构推荐榜
  • 2025年市场最好的微动开关定做厂家排名,汽车微动开关/新能源微动开关/微动开关/大型微动开关订做厂家怎么选
  • 专为“玩色”而生?市面5款热门挑染产品深度横评:谁是色彩玩家首选?
  • 从 Chatbot 到数字员工:AI Agent 指挥官的工程化升级
  • 2026年 聚四氟乙烯制品厂家推荐榜单:PTFE板/棒/密封件/异形件/垫片/管材,精选耐腐蚀高耐磨工业级原料供应商
  • AI搜索时代,马鞍山企业如何精准获客?本地化服务商领军者三十六行科技及五大优选伙伴详解
  • 2025年12月高铁广告服务商实力盘点:TOP5资源丰富、效果优质企业权威发布
  • 2026年1月高铁广告公司优选指南:TOP5服务商盘点,精准触达出行人群
  • 2026县城包子加盟优质品牌TOP10推荐
  • π RL(piRL)算法支持用强化学习手段训练π 0/π 0.5(pi0/pi0.5)
  • 用AI写英文论文,又用降AIGC系统降AI率,这样做的意义在哪?
  • 2026年 聚四氟乙烯管/板/棒/加工件/异形件厂家推荐榜:耐腐蚀高性能工程塑料制品优质供应商精选
  • Java 企业 AI 智能化:可插拔架构核心实践
  • 2026包子铺加盟top5品牌推荐覆盖县城乡镇:早餐店加盟品牌、早餐连锁店加盟、比较火的早餐店加盟、特色包子店加盟选择指南