真的好怪题解:P14314 [Aboi Round 2] Oneshot

news/2025/11/22 20:05:53/文章来源:https://www.cnblogs.com/lymsHz17/p/19258490

来一篇真的好怪的题解。

正文

首先有一个很低级的做法,就是每次询问直接拉出来 \(\frac np\) 个数,然后排好序,用另外 \(\frac nq\) 个数在那上面二分就结束了。

这样做的复杂度是 \(\mathcal{O}(nm\log n)\)

然后我们记忆化一下,发现小的 \(q,p\) 出现次数不会很多,就很好,至于复杂度我就不会算了。

不知道有多少分。

然后虽然不知道复杂度是多少但是总之考虑砍掉 \(\log\)

考虑阈值分治,定义阈值 \(B\)

给小于 \(B\)\(q,p\) 提前处理好排过序的数组,这样复杂度就优很多,定义阈值为 \(\log n\) 就可以砍掉 \(\log\),不过显然阈值拉高一点是好的。

考虑继续优化复杂度。

不过我们可以先尝试交一发。

结果就 AC 了。

所以就不优化复杂度了,反正我也不会算,就当它是对的算了。

代码

// code by 樓影沫瞬_Hz17
#include <bits/extc++.h>using namespace std;
constexpr int N = 5e4 + 10, B = 100; // 随便乱设的阈值uint n, m;
uint16_t a[N];uint16_t *wer[B + 10][B + 10], *ed[B + 10][B + 10];
uint16_t wsz[B + 10][B + 10]; // 因为一些原因我对 vector 有阴影了,所以不用,我选择手写
using puu = pair<uint, uint>;
puu b[N];using __gnu_pbds::gp_hash_table; // 好长的记忆化数组…………
gp_hash_table<uint16_t, gp_hash_table<uint16_t, gp_hash_table<uint16_t, unordered_map<uint16_t, uint> > > > ans;
uint16_t tmp1[N], tmp2[N]; // 相当于提前申请点内存signed main() {#ifndef ONLINE_JUDGEfreopen("in.ru", "r", stdin);freopen("out.ru", "w", stdout);#endifios::sync_with_stdio(0), cin.tie(0), cout.tie(0);cin >> n >> m;for(uint i = 1; i <= n; i ++) cin >> a[i], b[i] = {a[i], i};sort(b + 1, b + 1 + n, [](const puu &a, const puu &b) { return a.first < b.first; }); // 现在排了,一会省点排序for(uint p = 1; p <= B; p ++) for(uint i = 1; i <= n; i ++) wsz[p][i % p] ++; for(uint p = 1; p <= B; p ++) for(uint les = 0; les < p; les ++) wer[p][les] = ed[p][les] = new uint16_t[wsz[p][les] + 10];for(uint p = 1; p <= B; p ++) for(uint i = 1; i <= n; i ++) *ed[p][b[i].second % p] ++ = b[i].first; // 省在这了auto PreCalc = [](uint16_t *st1, uint16_t *ed1, uint16_t *st2, uint16_t *ed2) -> puu {uint res1 = 0, res2 = 0, ct1 = 0, ct2 = 0;// 如果两个数组都有序就直接归并,别二分了while(st1 != ed1 and st2 != ed2) {while(*st1 < *st2 and st1 != ed1) res1 += ct2, st1 ++, ct1 ++;while(*st1 == *st2 and st1 != ed1) res1 += ct2, st1 ++, ct1 ++, res2 --;while(*st2 < *st1 and st2 != ed2) res2 += ct1, st2 ++, ct2 ++;}while(st2 != ed2) res2 += ct1, st2 ++;while(st1 != ed1) res1 += ct2, st1 ++;return {res1, res2};}; // 本来打算预处理所以函数名叫预处理uint16_t p, x, q, y;while(m --) {cin >> p >> x >> q >> y;if(ans[p][q][x].count(y)) cout << ans[p][q][x][y] << '\n';else if(p <= B and q <= B) { // 分类讨论好长啊…………auto [res1, res2] = PreCalc(wer[p][x], ed[p][x], wer[q][y], ed[q][y]);ans[p][q][x][y] = res2;ans[q][p][y][x] = res1;cout << ans[p][q][x][y] << '\n';}else { uint ans = 0; if(p <= B) { // 好长啊…………uint16_t *st1 = wer[p][x], *ed1 = ed[p][x];for(uint i = y == 0 ? q : y; i <= n; i += q) ans += lower_bound(st1, ed1, a[i]) - st1;}else if(q <= B) { // 好长啊…………uint16_t *st2 = wer[q][y], *ed2 = ed[q][y];for(uint i = x == 0 ? p : x; i <= n; i += p) ans += ed2 - upper_bound(st2, ed2, a[i]);}else { // 真的好长啊…………uint16_t *st1 = tmp1, *ed1 = tmp1;for(uint i = x == 0 ? p : x; i <= n; i += p) *ed1 ++ = a[i];sort(st1, ed1);for(uint i = y == 0 ? q : y; i <= n; i += q) ans += lower_bound(st1, ed1, a[i]) - st1;}::ans[p][q][x][y] = ans;cout << ans << '\n';}}
}

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

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

相关文章

ElasticSearch索引库操作 - 努力-

ElasticSearch索引库操作一、ElasticSearch基础概念 1.1 文档和字段:ElasticSearch是面向文档(Document)存储的,可以是数据库中的一条商品数据,一个订单信息。文档数据会被序列化为json格式后存储在ElasticSearch…

2025年集成房屋设计公司十大排名,岗亭加工厂家十大排行榜,专业岗亭定制工厂怎么选?彩钢移动厕所厂家推荐。

2025年集成房屋设计公司十大排名,岗亭加工厂家十大排行榜,专业岗亭定制工厂怎么选?彩钢移动厕所厂家推荐。2025年集成房屋设计公司十大排名,岗亭加工厂家十大排行榜,专业岗亭定制工厂怎么选?彩钢移动厕所厂家推荐…

洛谷 P5658 [CSP-S 2019] 括号树 题解

题目大意 给定一棵树,每个节点有一个括号。对于每个节点 \(i\),定义 \(s_i\) 为从根节点到 \(i\) 的路径上所有括号按顺序组成的字符串。求每个 \(s_i\) 中互不相同的合法括号子串的个数 \(k_i\)。 思路 首先,\(k_i…

礼盒拖车公司推荐,礼盒拖车定制公司排行榜,礼盒拖车厂家口碑推荐,礼盒拖车生产厂家-航利通达

礼盒拖车公司推荐,礼盒拖车定制公司排行榜,礼盒拖车厂家口碑推荐,礼盒拖车生产厂家-航利通达礼盒拖车公司推荐,礼盒拖车定制公司排行榜,礼盒拖车厂家口碑推荐,礼盒拖车生产厂家-航利通达在当下这个视觉至上的时代…

360笔试

看到 PC 客户端对 ACMer 有加分项,就投了下这个。 \(2\) 个小时,前面有 \(40\) 道选择题,涉及内容包含数学、数据结构、操作系统、网络安全,还有一些关于 C++ 的类什么的和一些简单算法的原理什么的,不过前面那些…

图像的颜色模式

图像的颜色模式0.1 灰度模式 也就是灰度图(黑白照片),每个像素只有明暗变化,用0~255共256个亮度级来表示,用8个bit来表示,所以每个像素信息用8bit储存. 0.2 位图模式(二值图像) 即只有纯黑和纯白两种亮度,没有渐变…

.NET+AI | MEAI | Function Caling 实操(4)

.NET+AI | MEAI | Function Caling 实操 TL;DR✅ 注册你的方法为工具(Tool) ✅ 启用中间件 UseFunctionInvocation() ✅ 设置 ChatOptions.ToolMode = Auto ✅ 发起对话,MEAI 自动完成:请求 → 调用 → 回填 → 作…

高频变压器公司口碑榜单,电感公司技术排名,电感厂家交付效率排名,磁性元器件公司客户推荐,电感器公司产能排名,线圈公司行业排名-汉翔电子

高频变压器公司口碑榜单,电感公司技术排名,电感厂家交付效率排名,磁性元器件公司客户推荐,电感器公司产能排名,线圈公司行业排名-汉翔电子高频变压器公司口碑榜单,电感公司技术排名,电感厂家交付效率排名,磁性…

noip13

11.2211.22 颓死了,不想改。 t1 场切。 观察大样例大胆猜测答案很小(实际上答案不超过6,伏笔)。 然后手模inf组数据即可发现结论。 将每个数在这几步中每次选几个看成 \(x\) 进制数 (\(x=a_{i+1}/a_i\)) ,而 \(x^…

高频变压器厂家,电感生产厂家,磁性元器件源头厂家推荐,滤波器生产厂家有哪些,高频变压器公司排行榜,高频变压器公司交付效率排名,高频变压器公司小型化解决方案

高频变压器厂家,电感生产厂家,磁性元器件源头厂家推荐,滤波器生产厂家有哪些,高频变压器公司排行榜,高频变压器公司交付效率排名,高频变压器公司小型化解决方案高频变压器厂家,电感生产厂家,磁性元器件源头厂家…

Java中HashMap的核心原理与使用注意事项

大家好,我是一名正在实习的Java开发。最近在参与项目迭代时,遇到了一个很棘手的问题:线上环境有个接口偶尔会出现响应超时,排查了半天才发现,原来是并发场景下误用了HashMap导致的哈希冲突恶化,查询性能直接从O(…

MinIo介绍 - 努力-

MinIo介绍MinIo介绍,文件存储一、 MinIO介绍MinIO作为文件存储的软件,这是一个基于Go编写的开源对象存储套件,虽然轻量,却拥有着不错的性能。  MinIO非常适合于存储大容量非结构化的数据,例如图片、视频、日志文…

BLOG1

一、前言 知识点覆盖:三次作业逐步引入了类的封装与继承、集合框架(ArrayList、HashSet、Deque等)的应用、单一职责原则(SRP)的实践、请求队列的管理、调度算法的优化,以及输入输出的高效处理。此外,还涉及边界…

host with linux

在 Linux 系统中,"host" 通常指的是 主机(主机名),即一个计算机的名称。在 Linux 系统中,主机名可以通过 hostname 命令查看或修改。一、查看当前主机名hostname或者echo $HOSTNAME这两个命令的功能是一…

深入解析:算法基础篇(8)贪心算法

深入解析:算法基础篇(8)贪心算法2025-11-22 19:33 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !imp…

详细介绍:【STM32】工程文件管理

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

南昌航空大学-ptajava

前言 本次对PTA作业进行总结,共三道Java大题,为电梯调度程序的迭代开发。涉及到基础Java语言的运用,look电梯调度算法的实现,队列结构的使用,枚举类型运用,类设计,迭代开发能力等知识点。 第一次作业:单部电梯…

sguardsvc64.exe(Anti-Cheat Expert)驱动不兼容导致无法开启“内核模式硬件强制堆栈保护”或“内存完整性”

windows安全感中心,有时候会提示无法开启“内核模式硬件强制堆栈保护”或“内存完整性”。打开详情会显示sguardsvc64.exe的原因,这个其实是腾讯反作弊系统相关的文件。大概率你是一个腾讯游戏玩家。刚开始网上搜索如…

Wi-Fi FTM 技术 10 年后展望

1. 技术成熟背景 假设 10 年后,全球 Wi-Fi AP 生态全面升级,所有 AP 都支持 IEEE 802.11mc/ax FTM 功能,同时绝大多数智能手机和平板、IoT 设备也原生支持 FTM 测距。这意味着:用户设备无需额外硬件即可实现高精度…

Docker使用【镜像】 - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …