题解:P12410 「知りたくなかった、失うのなら」

news/2025/10/3 17:25:24/文章来源:https://www.cnblogs.com/lymsHz17/p/19124780

link

说在前面

如果你看了这个东西你最好就看个乐子别真的去写,卡常卡死你

做法什么的请直接看正文。

注意到其他题解给出了很优美的做法,那么我就来点不优美的。
先设几个数字吧,设 \(V\) 为值域,\(L\) 为分治的边界,\(ca\)\(a\) 大于 \(L\) 的询问数,\(cm\) 则为另一部分的询问数,再令 \(B\) 为每棵线段树的长度。
这篇题解的复杂度是这样的:

\[O(ca \sqrt n + ca \frac VL + cm (\frac V{B} + \log B) + Ln \log B) \]

上面这个东西不很好,显然不可以算。

约掉一些比较小的项,再将一些值域相等的数化为相同的后……哪怕那坨东西已经很不严谨了,我还是不会算。

总结一下,是 \(O(能过)\)

正文

首先在 \(a\) 比较大的情况下显然是可以用莫队维护区间数的出现与否然后直接枚举每一个 \(ka + b\) 做的,你飞速打了一份,觉得代码已经完成一半了。

问题只在于 \(a\) 很小的话就会变成 \(Vq\) 的复杂度,这是不可以接受的,考虑根号分治,去处理 \(a\) 小的情况。

发现对于每一个数字 \(c\)\(a\) 一定的前提下都有着唯一的 \(b + ak\) 与其对应。维护一个二维数组 \(f\)。我们可以考虑对于每一个有相同的 \(a\) 的询问按照 \(r\) 单调递增的顺序排序,每扩展一次 \(r\) 就更新 \(f_{(b,k)}\) 的值为 \(r\),这时询问就可以转化一下,分别令 \(k_x, k_y\) 为满足 \(x \le ka+b\le y\)\(k\) 的最小最大值,问题也就转化成了:
在按照 \(r\) 更新完后,查询 \(f_{(b,[k_x,k_y])}\) 的最小值是否小于 \(l\)

所以显然可以用线段树来干这件事,直接开 \(b\) 棵来维护就行了。

然后你设分治边界是 \(L\),高高兴兴的把 \(L\) 设置为 \(\sqrt n\),再然后 TLE 了。

查询总复杂度 \(O(ca \log n)\),修改总复杂度 \(O(Ln \log n)\),你发现这个东西总复杂度竟然是 \(O(\sqrt n \log n)\),烂透了,所以想要优化。

我们可以对于每一个 \(b\) 开多棵线段树,维护不同段的最小值,然后就很好,线段树整块查询是 \(O(1)\) 的,你设块长为 \(B\)

查询总复杂度 \(O(ca{(\frac nB + \log B)})\),修改总复杂度 \(O(Ln \log B)\),你发现这个东西好极了,所以设 \(B\)\(\sqrt {cm}\),想要通过。

然后又 TLE 了。

你发现 \(L\) 的值不很优秀,两边的复杂度不平衡。

然后你发现你不会平衡这个复杂度,然后你疯狂加入卡常并人工退火多次尝试修改 \(B\)\(L\) 并交了 \(114\) 发左右才 AC。

不是你写的代码

// code by 樓影沫瞬_Hz17
#include <bits/extc++.h>
using namespace std;#define getc() getchar_unlocked()
#define putc(a) putchar_unlocked(a)
#define en_ putc('\n')
#define e_ putc(' ')inline int in() { int n = 0; char p = getc();while (p < '-') p = getc();do n = n * 10 + (p ^ 48), p = getc();while (isdigit(p));return n;
}
#define in(a) a = in()using pii = pair<int, int>;constexpr int N = 5e5 + 10, B = 800, L = 6, V = 5e5;	
#define mid ((l + r) >> 1) // 欸为什么 L 取到 6 最快啊?太诡异了int c[N], n, m, cm, ca;
struct quer {int l, r, x, y, a, b, id;
} qm[N], qa[N];unsigned short cnt[N]; // 这一句是 short 会跑得飞快但是会被 hack,但是其实 int 也能过
int pos[N];
int pl[N], pr[N];bool ans[N];
int ls[N * 5], rs[N * 5], rt[N / 10][L], mi[N * 5];
int cntn = 0;inline void update(int &u, const int l, const int r, const int p, const int x) {if(!u) u = ++ cntn;if(l == r) {mi[u] = x;return;}if(p <= mid) update(ls[u], l, mid, p, x);else update(rs[u], mid + 1, r, p, x);mi[u] = mi[ls[u]] < mi[rs[u]] ? mi[ls[u]] : mi[rs[u]];
}inline int query(const int u, const int l, const int r, const int L, const int R) {if(!u) return -1;if(L <= l and r <= R) return mi[u];if(L <= mid and R > mid) return min(query(ls[u], l, mid, L, R), query(rs[u], mid + 1, r, L, R));if(L <= mid) return query(ls[u], l, mid, L, R);if(R > mid) return query(rs[u], mid + 1, r, L, R);return 500000;
}signed main() {in(n), in(m);for(int i = 1; i <= n; i ++) in(c[i]);quer q;for(int i = 1; i <= m; i ++) {in(q.l), in(q.r), in(q.x);in(q.y), in(q.a), in(q.b);q.id = i;if(q.a >= L) qa[++ ca] = q;else qm[++ cm] = q;}for(int i = 1; i <= n; i ++) pos[i] = i / B;sort(qa + 1, qa + 1 + ca, [](const quer&a, const quer&b) {return pos[a.l] == pos[b.l] ? pos[a.l] & 1 ? a.r < b.r : a.r > b.r : pos[a.l] < pos[b.l];});for(int i = 1, l = 1, r = 0, L, a, b, x, y; i <= ca; i ++) {while(l < qa[i].l) cnt[c[l]] --, l ++;while(l > qa[i].l) l --, cnt[c[l]] ++;while(r < qa[i].r) r ++, cnt[c[r]] ++;while(r > qa[i].r) cnt[c[r]] --, r --;L, a = qa[i].a, b = qa[i].b, x = qa[i].x, y = qa[i].y;L = x < b ? 0 : (x - b) / a + ((x - b) % a != 0);ans[qa[i].id] = 1;for(; a * (L + 8) + b <= y; L += 8) if(!cnt[a * L + b] || !cnt[a * (L + 1) + b] || !cnt[a * (L + 2) + b] || !cnt[a * (L + 3) + b] || !cnt[a * (L + 4) + b] || !cnt[a * (L + 5) + b] || !cnt[a * (L + 6) + b] || !cnt[a * (L + 7) + b]) {ans[qa[i].id] = 0;break;}for(; a * L + b <= y; L ++) if(!cnt[a * L + b]) {ans[qa[i].id] = 0;break;}}sort(qm + 1, qm + 1 + cm, [](const quer&a, const quer&b) { return a.a == b.a ? a.r < b.r : a.a < b.a; });const int B = sqrt(cm) + 1;for(int j = 1; pr[j - 1] != V; j ++) {pl[j] = B * (j - 1), pr[j] = min(V, B * j - 1);for(int k = pl[j]; k <= pr[j]; k ++) pos[k] = j;}memset(mi, ~0x1f, sizeof mi);for(int i = 1, r, a, b, x, y, p, j, ql, qr, id; i <= cm; i ++) {a = qm[i].a, b = qm[i].b, x = qm[i].x, y = qm[i].y, id = qm[i].id;if(a != qm[i - 1].a) {memset(mi, ~0x1f, (cntn + 1) << 2);memset(ls, 0, (cntn + 1) << 2);memset(rs, 0, (cntn + 1) << 2);memset(rt, 0, sizeof rt);cntn = 0;r = 0;}while(r < qm[i].r) {r ++; p = (c[r] - (c[r] % a)) / a; update(rt[pos[p]][c[r] % a], pl[pos[p]], pr[pos[p]], p, r);	}ql = x <= b ? 0 : (x - b) / a + ((x - b) % a != 0), qr = (y - b) / a;const int Y = qm[i].l;if(pos[ql] == pos[qr]) {ans[id] = (query(rt[pos[ql]][b], pl[pos[ql]], pr[pos[qr]], ql, qr) >= Y);continue;}ans[id] = 1;query(rt[pos[ql]][b], pl[pos[ql]], pr[pos[ql]], ql, pr[pos[ql]]) < Y ? ans[id] = 0 : 0;query(rt[pos[qr]][b], pl[pos[qr]], pr[pos[qr]], pl[pos[qr]], qr) < Y ? ans[id] = 0 : 0;if(!ans[id]) continue;for(j = pos[ql] + 1; j < pos[qr]; j ++) if(mi[rt[j][b]] < Y) {ans[id] = 0;break;}}for(int i = 1; i <= m; i ++) puts(ans[i] ? "YES" : "NO");
}  
// 星間~ 干渉~ 融解~ 輪迴~ 邂逅~ 再生~ ララバイ~

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

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

相关文章

unity面向组合开发二:EC的代码实践

一、ECCore 需要在Unity项目中使用插件:UniRx,通过UniRx代替Mono的Update,Mono下做轮询性能消耗会有点大。 EntityMono代码:using System; using System.Collections.Generic; using EC; using UniRx; using Unity…

《咳咳,未来编程大师,顶尖程序员的第一条博客》

Helloooooo World!本人目前是一个在校大二的学生,正在备战蓝桥杯,希望有相同目标的朋友联系我,我们可以一起备赛,一起刷题。我的目标是在2026蓝桥杯比赛上拿下国一,哈哈哈哈虽然听起来很扯,但是我是会用拿国一的…

CSP-JF36

CSP-JF36T2 B. 最小的公倍数小题 ((10^L / 210) + 1) * 210 就是最小值#include <bits/stdc++.h> using namespace std;int n; int main(){// for(int i = 2; i <= 18; i++){ // long long x = pow…

airsim多无人机+无人车联合仿真辅导 - 教程

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

超越炒作:使用Agentic AI构建系统架构

本文深入探讨了Agentic AI系统的架构设计,分享了实际应用中的模式、反模式和用例,讨论了如何管理这些分布式系统的复杂性和非确定性,并提供了构建可信赖、可扩展生产系统的实用建议。超越炒作:使用Agentic AI构建系…

河北省建设信息网站seo网站优化平台

12.全排列II 题目描述 给定一个可包含重复数字的序列 nums &#xff0c;按任意顺序 返回所有不重复的全排列。 示例 1&#xff1a; 输入&#xff1a;nums [1,1,2] 输出&#xff1a; [[1,1,2],[1,2,1],[2,1,1]]示例 2&#xff1a; 输入&#xff1a;nums [1,2,3] 输出&…

一个网站的建站流程建设安全协会网站

【题目来源】https://leetcode.cn/problems/valid-parenthesis-string/description/【题目描述】 给你一个只包含三种字符的字符串&#xff0c;支持的字符类型分别是 (、) 和 *。请你检验这个字符串是否为有效字符串&#xff0c;如果是有效字符串返回 true 。 有效字符串符合如…

岷县城乡建设局网站wordpress有多大的数据量

欢迎同步关注公众号【逆向通信猿】 远程声控系统技术报告 一、题目要求 实现一个远程声音控制系统。首先采集不同的语音指示信号,进行适当压缩;然后通过噪声信道实现远程传输,远端接收后再通过适当计算识别出是何指示,最后送入一个处于未知状态、但能控/能观的控制系统,…

【进入便捷的系统不解决问题】ubuntu开机出现‘系统出错且无法恢复。请联系系统管理员’

【进入便捷的系统不解决问题】ubuntu开机出现‘系统出错且无法恢复。请联系系统管理员’2025-10-03 17:09 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important;…

K个节点的组内逆序调整

K个节点的组内逆序调整题目 给定一个单链表的头节点head,和一个正数k实现k个节点的小组内部逆序,如果最后一组不够k个就不调整 例子: 调整前:1->2->3->4->5->6->7->8,k=3 调整后:3->2-&…

【任务】自然语言处理——情感分析 <上>

【任务】自然语言处理——情感分析 <上>pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "…

2025华为 OD 机试2025C卷 机考真题库清单(全真题库)含考点说明(OD上机考试2025年C卷) - 教程

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

网站开发 职业环境分析重庆免费做网站

数据库 mysql面试题目&#xff1a; MySQL InnoDB、Mysaim的特点&#xff1f; 乐观锁和悲观锁的区别&#xff1f;&#xff1f; 行锁和表锁的区别&#xff1f; 数据库隔离级别是什么&#xff1f;有什么作用&#xff1f; MySQL主备同步的基本原理。 如何优化数据库性能&#…

做seo的网站推广咨询公司名称大全

1.前提是必须先安装好MySQL数据库(Mac下安装MySQL数据库见前一篇)2.安装Navicat3.点击navicate左上角&#xff1a;连接->MySQL->先测链接下&#xff0c;如果提示连接成功&#xff0c;就可以填写连接名&#xff0c;点击连接即可。双击刚创建的连接下面会有四个数据库用naV…

【Azure App Service】Root CA on App Service

应用服务具有受信任的根证书列表,无法在应用服务的多租户 Windows (App Service for Windows)中修改这些证书,但可以在应用服务环境 (ASE) 的受信任根存储中加载自己的证书颁发机构 (CA) 证书,这是因为ASE中的应…

手机端seo优化推广seo

一、连接mysql 1. 打开idea&#xff0c;在右上角侧边栏有数据库database插件&#xff0c;打开侧边栏点击加号->数据源&#xff0c;可以看到支持很多数据库&#xff0c;选择mysql。 2. 首次使用需要下载驱动程序&#xff0c;不然连接数据库会报错。找到mysql&#xff0c;点击…

QOJ #8147. Math Exam 题解

Description 求序列 \(a_{1\cdots n}\) 的个数,满足:\(|a_i|\le m\) 且 \(4\sum_{j=1}^i a_j=(a_i+1)^2\)。 \(1\le n\le 10^7\),\(1\le m\le 2n\),\(m\) 是奇数。 Solution 首先推一下式子会发现 \(a_1=1\),\(\f…

10.03模拟赛t3

CF475E Strongly Connected City 2 题目描述 想象有一座城市,这座城市有 \(n\) 个路口和 \(m\) 条街道。路口编号从 \(1\) 到 \(n\)。 为了提高交通流量,市长决定将每条街道改为单行道。这意味着在连接路口 \(u\) 和…

国庆梦熊集训做题记录

炼石计划T1:https://www.cnblogs.com/yanbinmu/articles/19122547 T2:https://www.cnblogs.com/yanbinmu/articles/19122718D3 作业 A. 关于整除分块 B. 题解:ABC192F Potion 最开始的想法遍历 k 判断可行,然后再想办…

网站ip查询福建 专业网站建设公司

(1).局部组件的使用 ​ 渲染组件-父使用子组件 1: 创建子组件(对象) var Header { template:模板 , data是一个函数,methods:功能,components:子组件们 } 2: 在父组件中声明,根属性components:{ 组件名:组件对象 }3: 在父组件要用的地方使用 <组件名></组件名> …