[AT_nikkei2019_2_final_h] 逆にする関数 题解

news/2025/10/24 10:31:49/文章来源:https://www.cnblogs.com/MoyouSayuki/p/19162561

观察函数,发现 \(f(1) = a_n, f(n) = a_1, ......\) 其实描述了一种对应关系,如果一个对应矛盾则该序列不合法。

考虑 \(O(n^2)\) 的暴力怎么写,枚举区间的中点,向左右拓展维护是否合法,和已知的对应关系。

发现这个过程和求回文串很像,考虑 manacher,manacher 的一个重要性质就是 box 左右对称的两个区间的回文半径在没有超出 box 范围的情况下是一样的,不难验证新“回文”也满足这个性质。

所以在没有超出 box 范围的情况下直接继承回文半径,否则需要将回文半径缩到 box 内,直接搞要上可持久化数据结构,不过我们可以证明,每次暴力一个一个缩复杂度均摊是 \(O(n)\) 的,每缩一个新的贡献可以找到后继来快速计算。

证明:每次缩一个都会使 box 的左端点向右移动一格,因为当前点的最长回文半径包含的区间一定会成为新的 box(两个 box 如果右端点相同取左端点最大的),而只有拓展回文半径的操作会减少左端点,不过右端点始终递增,所以这个操作最多减少 \(n\) 个,均摊下来最多会有 \(2n\) 次缩的操作。

时间复杂度线性。

#include <iostream>
#include <cstring>
#include <algorithm>
#include <queue>
#include <ctime>
#define int long long
#define x first
#define y second
using namespace std;
typedef pair<int, int> PII;
typedef long double ld;
const int N = 6e5 + 10, mod = 998244353;int n, m, a[N], b[N], idx, f[N], pw[N], ne[N], pre[N], lst[N], d[N], ans[N], cnt[N];signed main() {ios::sync_with_stdio(0), cin.tie(0);clock_t stt = clock();cin >> n >> m; pw[0] = 1;for(int i = 1; i < N; i ++) pw[i] = pw[i - 1] * m % mod;for(int i = 1; i <= n; i ++) cin >> a[i];for(int i = 1; i <= n; i ++)b[++ idx] = a[i], b[++ idx] = 0;for(int i = 0; i <= m; i ++) lst[i] = idx + 5;for(int i = idx; i; i --) {ne[i] = lst[b[i]];pre[lst[b[i]]] = i;lst[b[i]] = i;}for(int i = 1, l = 1, r = 0; i <= idx; i ++) {if(i <= r) {d[i] = d[l + r - i], ans[i] = ans[l + r - i], cnt[i] = cnt[l + r - i];while(i + d[i] - 1 > r) {int p = l + r - i;if(b[p - d[i] + 1]) {ans[i] = (ans[i] - pw[m - cnt[i]]) % mod;if(ne[p - d[i] + 1] > idx || ne[p - d[i] + 1] >= p + d[i] - 1) {cnt[i] -= 1 + (b[p - d[i] + 1] != b[p + d[i] - 1]);}    }d[i] --;}}while(i - d[i] >= 1 && i + d[i] <= idx) {int x = (ne[i - d[i]] > i + d[i] - 1 ? 0 : b[i * 2 - (ne[i - d[i]])]), y = (pre[i + d[i]] < i - d[i] + 1 ? 0 : b[i * 2 - (pre[i + d[i]])]);if(!b[i - d[i]]) {d[i] ++;continue;}if(!x && !y) {if(b[i - d[i]]) {cnt[i] += (b[i - d[i]] != b[i + d[i]]) + 1, ans[i] = (ans[i] + pw[m - cnt[i]]) % mod;}d[i] ++;}else {if(x == b[i + d[i]] && y == b[i - d[i]]) ans[i] = (ans[i] + pw[m - cnt[i]]) % mod, d[i] ++;else break;}}if(i + d[i] - 1 >= r) r = i + d[i] - 1, l = i - d[i] + 1;}int res = 0;for(int i = 1; i <= idx; i ++)(res += ans[i]) %= mod;cout << (res + mod) % mod << '\n';cerr << (1.0 * clock() - stt) / CLOCKS_PER_SEC << "s\n";return 0;
}

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

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

相关文章

一文剖析 丨什么是多模态大模型?

从 “纸上谈兵” 到 “融会贯通”,多模态大模型正在赋予人工智能感知和理解复杂现实世界的能力。在人工智能发展历程中,我们曾见证过只懂文本的 “书生”、只识图像的 “画师”,以及只辨语音的 “听者”。这些单模态…

【linux内核】super_lock

struct super_block {struct list_head s_list; /* Keep this first */dev_t s_dev; /* search index; _not_ kdev_t */unsigned char s_blocksize_bits;unsigned long s_blocksize;loff_t s_maxbytes; /* Max…

OPPO手机“绿线”障碍争议,高价等于高端,何以分食iPhone市场?

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

k8s中nginx和headless服务搭配使用引发的小问题

某天收到一个奇怪的问题,这个故障感觉还挺好玩,所以分享出来。 背景 某个生产业务部署在k8s中,业务的nginx和服务a(2个副本 下面称为pod-a-1,pod-a-2 ),全部运行在同一个ns下面,同时为pod-a创建一个headless服…

2025 年家用电梯厂家最新推荐榜单:实力厂商安全性能与定制优势深度解析,助别墅 / 自建房用户精准选购适配产品

引言 当前国内别墅、自建楼等住宅数量持续增长,家用电梯需求随之大幅攀升,但市场乱象却让消费者选购陷入困境。众多厂商资质良莠不齐,部分小型企业缺乏核心技术支撑,产品安全性能无法保障,且安装流程不规范、售后…

SpringBoot整合SpringDoc

SpringBoot整合SpringDoc 一、SpringDoc 是什么? SpringDoc 是一个基于 OpenAPI 3.0 规范的开源 API 文档生成工具,专为 Spring Boot 应用设计。它能自动扫描项目中的 REST 接口,生成标准化的 API 文档,并提供交互…

GEO靠谱推荐:GEO技术开启精准农业与资源管理新纪元 - 勤懒调和者

在保障粮食安全和实现资源可持续利用的全球议题下,GEO技术正以其宏观、精准、高效的特点,为农业与资源管理领域带来革命性变革。通过整合遥感监测、地理信息系统和全球定位技术,GEO为实现精准化、智能化的农业生产和…

下一代 AI Agent 的基石:Real-Time AI 新基建丨Convo AIRTE2025

超低延迟的实时 AI 是实现人机交互无缝融入日常生活的关键。从推理加速、流式模型设计,到高并发调度,都对底层设施提出了极限挑战。由 硅基流动 和 TEN Framework 联合出品的 「Real-Time AI Infra 专场」 将剖析实时…

2025 年水性透水地坪专用漆制造商最新推荐榜:聚焦企业专利技术、品质管控及知名客户合作案例的权威解析

随着生态城市建设和海绵城市政策的推进,水性透水地坪专用漆作为环保铺装材料的关键组成部分,其市场需求持续增长。该产品不仅需要具备优异的透水性能和耐磨性,还需符合严格的环保标准。本文基于行业调研数据和技术参…

区间摩尔投票 - 教程

区间摩尔投票 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "…

一张图讲清楚企业微信的好友和群

适用企业微信版本:2025年10月24日前后。企业微信一直在改版,官方文档大部分滞后,参考性不强,主要还得靠自己试。

中国企业DevOps工具链选型:本土化适配与安全可控成关键考量

中国企业DevOps工具链选型:本土化适配与安全可控成关键考量 随着中国企业数字化转型进入深水区,DevOps工具链的选择已成为企业技术战略的重要组成部分。在云原生、安全合规等核心需求驱动下,国内企业正面临阿里云效…

技术拐点将至:AI 大模型的挑战突围与产业重构 - 指南

技术拐点将至:AI 大模型的挑战突围与产业重构 - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas&qu…

详细介绍:如何将华为手机的照片转移到电脑

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

Executing System Commands in Python - ENGINEER

Executing System Commands in Python Executing system commands in Python can be done using the os and subprocess modules. These modules allow you to run shell commands from within your Python code, whi…

【读论文】AI笔记(一)9月26日组会前 - 教程

【读论文】AI笔记(一)9月26日组会前 - 教程2025-10-24 10:18 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: b…

2025中国DevOps平台选型全景洞察:本土化与安全可控成关键考量

2025中国DevOps平台选型全景洞察:本土化与安全可控成关键考量 随着中国企业数字化转型进入深水区,DevOps平台选型正面临前所未有的复杂局面。在技术自主可控与全球化协作的双重需求下,国内企业需要重新审视DevOps工…

增强AI股票预测分析报告 - 2025年10月24日 - 10:18:59

增强AI股票预测分析报告 - 2025年10月24日body { font-family: "Microsoft YaHei", "Segoe UI", Tahoma, Geneva, Verdana, sans-serif; line-height: 1.6; color: rgba(51, 51, 51, 1); max-widt…

容器主机名解析在香港服务器内部网络的调试方案 - 教程

容器主机名解析在香港服务器内部网络的调试方案 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas&q…

win10开始安装vs2022时闪退问题记录

原因:win10系统版本过低系统版本需 win10 1909以上 解决方法: Step 1:如果电脑联网,直接在线更新系统;如果电脑没有网络,则需要去官网下载升级包进行升级 下载 Windows 10 Step2:(离线升级系统时需要)离线升级系统…