2022 ICPC 香港 L

news/2025/10/15 14:54:32/文章来源:https://www.cnblogs.com/Kescholar/p/19143381

L. Permutation Compression

数据结构。

首先要让 \(a\) 删除数后得到 \(b\),显然要满足 \(b\)\(a\) 的子集。

因为每次删除的都是最大值,考虑从大往小枚举可删除的数,找左右两边比当前数大的位置,假设 \(l\)\(r\) 代表左右两边比当前数大的位置,那么 \([l+1,r-1]\) 这个区间内都以 \(i\) 为最大值,那么只要存在 \(L_i\) 小于等于 \(r-l-1\) 就可以把 \(i\) 删掉;把 \(i\) 删掉后,为了防止 \(i\) 对后续的影响,需要标记一下,在后续有 \(j\) 找两边最大值时越过了 \(i\) 的位置,需要减掉它的影响,所以对 \(j\) 来说,删除 \(j\) 的区间长度为 \(r-l-1-cnt\)\(cnt\) 代表 \([l+1,r-1]\) 区间内有多少个比 \(j\) 大的数被删掉了,可以用线段树维护这个过程。

最后比较一下每个数可删除的区间长度是不是都能找到一个 \(L_i\) 对应即可,可以将两者排序后一一比较即可。

点击查看代码
#include <bits/stdc++.h>using i64 = long long;template<class Info>
struct SegmentTree {int n;std::vector<Info> info;SegmentTree() : n(0) {}SegmentTree(int n_, Info v_ = Info()) {init(n_, v_);}template<class T>SegmentTree(std::vector<T> init_) {init(init_);}void init(int n_, Info v_ = Info()) {init(std::vector(n_, v_));}template<class T>void init(std::vector<T> init_) {n = init_.size();info.assign(4 << std::__lg(n), Info());std::function<void(int, int, int)> build = [&](int p, int l, int r) {if (r - l == 1) {info[p] = init_[l];return;}int m = (l + r) / 2;build(2 * p, l, m);build(2 * p + 1, m, r);pull(p);};build(1, 0, n);}void pull(int p) {info[p] = info[2 * p] + info[2 * p + 1];}void modify(int p, int l, int r, int x, const Info &v) {if (r - l == 1) {info[p] = v;return;}int m = (l + r) / 2;if (x < m) {modify(2 * p, l, m, x, v);} else {modify(2 * p + 1, m, r, x, v);}pull(p);}void modify(int p, const Info &v) {modify(1, 0, n, p, v);}Info rangeQuery(int p, int l, int r, int x, int y) {if (l >= y || r <= x) {return Info();}if (l >= x && r <= y) {return info[p];}int m = (l + r) / 2;return rangeQuery(2 * p, l, m, x, y) + rangeQuery(2 * p + 1, m, r, x, y);}Info rangeQuery(int l, int r) {return rangeQuery(1, 0, n, l, r);}template<class F>int findFirst(int p, int l, int r, int x, int y, F &&pred) {if (l >= y || r <= x) {return -1;}if (l >= x && r <= y && !pred(info[p])) {return -1;}if (r - l == 1) {return l;}int m = (l + r) / 2;int res = findFirst(2 * p, l, m, x, y, pred);if (res == -1) {res = findFirst(2 * p + 1, m, r, x, y, pred);}return res;}template<class F>int findFirst(int l, int r, F &&pred) {return findFirst(1, 0, n, l, r, pred);}template<class F>int findLast(int p, int l, int r, int x, int y, F &&pred) {if (l >= y || r <= x) {return -1;}if (l >= x && r <= y && !pred(info[p])) {return -1;}if (r - l == 1) {return l;}int m = (l + r) / 2;int res = findLast(2 * p + 1, m, r, x, y, pred);if (res == -1) {res = findLast(2 * p, l, m, x, y, pred);}return res;}template<class F>int findLast(int l, int r, F &&pred) {return findLast(1, 0, n, l, r, pred);}
};constexpr int inf = 1E9;struct Info {int max = -inf, cnt = 0;
};Info operator+(const Info &l, const Info &r) {return {std::max(l.max, r.max), l.cnt + r.cnt};
}void solve() {int n, m, k;std::cin >> n >> m >> k;SegmentTree<Info> seg(n);std::vector<int> a(n), b(m), c(k), vis(n), pos(n);for(int i = 0; i < n; i += 1) {std::cin >> a[i];a[i] -= 1;pos[a[i]] = i;seg.modify(i, {a[i], 0});}for(int i = 0; i < m; i += 1) {std::cin >> b[i];b[i] -= 1;vis[b[i]] = 1;}for(int i = 0; i < k; i += 1) {std::cin >> c[i];}int idx = 0;for(int i = 0; i < n; i += 1) {if(idx < m && a[i] == b[idx]) {idx += 1;}}if(idx != m) {std::cout << "NO\n";return;}std::vector<int> sz;for(int i = n - 1; i >= 0; i -= 1) {if(vis[i]) continue;int l = -1,r = n;auto x = seg.findLast(0, pos[i], [&](auto p) {return p.max > i;});l = x;x = seg.findFirst(pos[i] + 1, n, [&](auto p) {return p.max > i;});if(x != -1) {r = x;}l += 1, r -= 1;sz.push_back(r - l + 1 - seg.rangeQuery(l, r + 1).cnt);seg.modify(pos[i], {0, 1});}if(c.size() < sz.size()) {std::cout << "NO\n";return;}sort(c.begin(), c.end());sort(sz.begin(), sz.end());for(int i = 0; i < sz.size(); i += 1) {if(c[i] > sz[i]) {std::cout << "NO\n";return;}}std::cout << "YES\n";}
int main() {std::ios::sync_with_stdio(false);std::cin.tie(nullptr);int t;std::cin >> t;while (t--) {solve();}return 0;
}

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

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

相关文章

SQLite批量操作优化方案

using SQLiteBatch.Util; using System.Collections.Concurrent;namespace SQLiteBatch {internal class Program{static ConcurrentQueue<string> SqlQueue = new ConcurrentQueue<string>();static int …

2025 年乡村波形护栏厂家最新推荐排行榜:聚焦优质企业,助力乡村道路安全建设选型参考道路/高速/乡村道路/乡村公路波形护栏板厂家推荐

随着乡村振兴战略持续推进,乡村道路建设规模不断扩大,但道路安全设施配套不足的问题日益凸显,因缺乏有效防护设施导致的交通事故频发,严重威胁村民出行安全。乡村波形护栏作为关键防护设施,其质量与适配性直接影响…

员工签到微信小程序系统:企业考勤管理的高效解决方案

在数字化办公趋势下,传统考勤模式面临效率低、数据难追溯、管理成本高等痛点。基于微擎系统开发的员工签到微信小程序系统,以 “零接触、智能化、多场景适配” 为核心,整合考勤记录、请假审批、积分管理等功能,为企…

AI 姓氏头像生成小程序管理系统:专属头像定制与流量变现解决方案

在数字化时代,个性化头像成为用户表达身份与喜好的重要载体,而 AI 技术的融入更让头像创作高效便捷。这款 AI 姓氏头像生成小程序系统,依托微擎系统交付,主打 “姓氏 + 个性化风格” 头像一键生成功能,同时集成多…

AI元人文:元规则、元道德与哪吒模型

AI元人文:元规则、元道德与哪吒模型 ——悟空•哪吒 在AI元人文的探索中,我们最终抵达的核心,并非一个更精巧的算法,而是一个具备内在生命力的伦理架构。这个架构由三个环环相扣的概念构成:作为行动纲领的元规则,…

知音 CMS:全场景音频与小说分销一体化解决方案

一、概述总结 知音 CMS 是基于微擎系统开发的全场景内容管理系统,聚焦音频与网文阅读领域,通过深度接入喜马拉雅音频云及海量正版小说资源,为用户提供 “一键部署、快速变现” 的数字化内容运营工具。系统覆盖微信公…

2025年锅炉厂家最新权威推荐榜:工业锅炉、燃气锅炉、电热锅炉、蒸汽锅炉专业制造商实力解析与选购指南

2025年锅炉厂家最新权威推荐榜:工业锅炉、燃气锅炉、电热锅炉、蒸汽锅炉专业制造商实力解析与选购指南行业背景与发展趋势工业锅炉作为能源转换和热能供应的核心设备,在制造业、化工业、食品加工、区域供暖等领域发挥…

CCSP2025 游记

你觉得你是算法竞赛选手吗?目录写在前面 写在前面 嘻嘻。作者@Luckyblock,转载请声明出处。

powershell上移文件夹下的所有文件

将某个文件夹(例如 .\OldFolder)下的所有文件和子文件夹“上移”到其父目录中,然后 删除这个空的 OldFolder # 提示用户输入要上移的文件夹路径 $folderPath = Read-Host "请输入要上移内容的文件夹完整路径(…

2025 年国内算力云公司最新推荐排行榜:聚焦 AI 训推与 MaaS 服务,助力企业精准选优质合作伙伴算力云大模型/算力云深度学习/微调算力云/蓝耘算力云公司推荐

当前人工智能技术深度渗透各行业,算力作为 AI 研发与应用落地的核心支撑,需求呈爆发式增长,算力云服务市场也随之快速扩张。但市场上服务商数量众多,技术实力、服务质量、资源规模差异显著,企业在选择时常常面临 …

2025 年国内云计算公司最新推荐排行榜:聚焦 AI 训推与大模型需求的优质厂商精选指南模型训推云计算/大模型云计算/AI开发云计算公司推荐

当前人工智能技术加速渗透各行业,大模型训练、AI 推理等场景对算力的需求呈指数级增长,云计算作为核心支撑基础设施,市场规模持续扩容,但行业乱象也随之凸显。部分厂商存在算力资源分配失衡、技术服务断层等问题,…

2025年防水连接器厂家最新推荐排行榜,连接器,航空插头,工业网线,专业防水与耐用性能深度解析

2025年防水连接器厂家最新推荐排行榜,连接器,航空插头,工业网线,专业防水与耐用性能深度解析行业技术发展趋势分析随着工业4.0和智能制造时代的到来,防水连接器、航空插头及工业网线作为关键连接组件,其技术要求…

2025年清洗机厂家最新权威推荐榜:高压清洗机、工业清洗机、超声波清洗机源头厂家综合实力解析

2025年清洗机厂家最新权威推荐榜:高压清洗机、工业清洗机、超声波清洗机源头厂家综合实力解析在工业制造领域,清洗设备作为生产流程中不可或缺的环节,其技术水平和性能质量直接影响着生产效率和产品质量。随着制造业…

2025年微弧氧化厂家最新推荐排行榜,微弧氧化/铝合金微弧氧化/镁合金微弧氧化/黑色微弧氧化/钛合金微弧氧化/微弧氧化技术加工,渔具/雷达/医疗器械微弧氧化专业供应商

2025年微弧氧化厂家最新推荐排行榜:专业供应商深度解析微弧氧化技术作为一种先进的表面处理工艺,在工业制造领域发挥着日益重要的作用。该技术通过在金属表面产生微弧放电,形成一层具有优异性能的陶瓷化涂层,显著提…

2025 年永磁电机厂家最新推荐排行榜:聚焦高效节能电机品牌,助力采购者精准选优质产品直流/无刷/风机/节能/高效永磁电机厂家推荐

引言当前永磁电机在工业领域应用愈发广泛,已成为机械、石化、纺织等行业核心动力设备,但市场品牌繁杂、产品质量参差不齐,采购者常面临选择难题。部分企业缺乏核心技术,产品性能不稳定,还有企业交付周期长、定制化…

2025年武汉防水公司最新权威推荐榜:商铺装修防水,别墅补漏防水,厂房防潮防水专业施工与长效保障口碑之选

在建筑行业快速发展的今天,防水工程作为保障建筑安全与使用寿命的关键环节,其重要性日益凸显。无论是商铺装修中的地面防水、别墅补漏的精细化施工,还是厂房防潮的大面积处理,专业的防水公司能够通过先进技术和优质…

Prometheus源码专题【左扬精讲】—— 监控系统 Prometheus 3.4.0 源码解析:recording rule

Prometheus源码专题【左扬精讲】—— 监控系统 Prometheus 3.4.0 源码解析:recording rule https://github.com/prometheus/prometheus/blob/main/rules/recording.go在 Prometheus 监控体系中,查询性能和指标一致性…

2025年液压阀块厂家最新推荐排行榜,液压阀块加工,阀块零件机加工,液压阀加工,各种液压阀块专业制造商精选

2025年液压阀块厂家最新推荐排行榜,液压阀块加工,阀块零件机加工,液压阀加工,各种液压阀块专业制造商精选液压阀块作为液压系统中的核心元件,其加工质量直接影响整个系统的性能和可靠性。随着工业4.0时代的到来,…

2025年干燥设备厂家最新权威推荐榜:小型喷雾/实验室离心喷雾/双锥回转真空/搪瓷双锥/旋转闪蒸/振动流化床/真空耙式/单层带式/多层带式/立式沸腾/卧式沸腾/滚筒刮板干燥机

2025年干燥设备厂家最新权威推荐榜:小型喷雾/实验室离心喷雾/双锥回转真空/搪瓷双锥/旋转闪蒸/振动流化床/真空耙式/单层带式/多层带式/立式沸腾/卧式沸腾/滚筒刮板干燥机在工业生产过程中,干燥设备作为关键工艺装备…