*题解:P5278 算术天才⑨与等差数列

news/2025/11/11 21:26:53/文章来源:https://www.cnblogs.com/yuyc/p/19211644

原题链接

解析

要想放到线段树上做,就要考虑如何在不排序的情况下通过一系列可合并的信息判别等差数列。对于一个数列,我们知道它的长度 \(len\),配合上最大值 \(mx\) 最小值 \(mn\) 就可以判断询问给出的 \(k\) 能否作为公差,其能作为公差当且仅当 \(mx=mn+(len - 1)\cdot k\);公差为 \(k\) 意味着每个相邻元素的差是 \(k\) 的倍数,也即差的最大公约数是 \(k\) 的倍数;只有这些限制还不够,我们发现可能会出现数列中有相同元素的情况,所以对于每个元素维护在此之前最后出现的位置,由于有修改且强制在线,我们需要 map 套 set 维护每个值的出现位置集合。

上述条件是数列为合法等差数列的充要条件,感性理解一下,在已经确定了上下界和公差后,相邻元素的差是 \(k\) 的倍数保证了数列中的元素所代表的多重集合为 \(A = \{mn + n_1k,mn+n_2k,mn+n_3k,...,mn+n_{len}k\}\),而保证了没有重复元素后,由于我们确定了最小最大值且集合大小不变,可以确定 \(n\) 的取值覆盖了 \(0\)\(len-1\)似乎不是很感性。

综上,只需在线段树上维护区间最大最小值,区间最左最右值(用于求相邻元素的差),区间元素此前最后出现位置即可解决此题。

时间复杂度 \(O(m\log n)\)

代码

注意公差为 \(0\) 和单个元素的情况。

#include <bits/stdc++.h>
#define ls(p) ((p) << 1)
#define rs(p) (((p) << 1) | 1)
#define mid ((l + r) >> 1)
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int N = 3e5 + 5,M = 500 * 500,mod = 998244353;
int a[N],pre[N];
struct S{int empty;int mn,mx,lf,ri,gcd,pos;S(){empty = 1;mn = 0,mx = 0,lf = 0,ri = 0,gcd = 0,pos = 0;}void print(){cout<<"--------------------------------------\n";cout<<empty<<" "<<mn<<" "<<mx<<" "<<lf<<" "<<ri<<" "<<gcd<<" "<<pos<<'\n';cout<<"--------------------------------------\n";} 
}tr[N << 2];
map<int,set<int> > mp;
int _gcd(int a,int b){if(!a) return b;if(!b) return a;return __gcd(a,b);
}
S merge(S a,S b){S res;if(a.empty) return b;if(b.empty) return a;res.empty = 0;res.mn = min(a.mn,b.mn);res.mx = max(a.mx,b.mx);res.lf = a.lf;res.ri = b.ri;res.gcd = _gcd(_gcd(a.gcd,b.gcd),abs(a.ri - b.lf));res.pos = max(a.pos,b.pos);return res;
}
void push_up(int p){tr[p] = merge(tr[ls(p)],tr[rs(p)]);
}
void build(int p,int l,int r){if(l == r){tr[p].empty = false;tr[p].mn = tr[p].mx = tr[p].lf = tr[p].ri = a[l];tr[p].gcd = 0;tr[p].pos = pre[l];return;}build(ls(p),l,mid),build(rs(p),mid + 1,r);push_up(p);
}
void modi(int p,int l,int r,int x,int k){if(l > x || r < x) return;if(l == r){tr[p].mn = tr[p].mx = tr[p].lf = tr[p].ri = k;tr[p].pos = pre[l];return;} modi(ls(p),l,mid,x,k),modi(rs(p),mid + 1,r,x,k);push_up(p);
}
S query(int p,int l,int r,int L,int R,int k){if(l > R || r < L) return S();if(l >= L && r <= R){return tr[p];}return merge(query(ls(p),l,mid,L,R,k),query(rs(p),mid + 1,r,L,R,k));
}
int main(){ios::sync_with_stdio(false);cin.tie(0);
//	freopen("in.txt","r",stdin);
//	freopen("out.txt","w",stdout);int n,m;cin>>n>>m;for(int i=1;i<=n;i++){cin>>a[i];pre[i] = mp[a[i]].empty() ? 0 : *prev(mp[a[i]].end());mp[a[i]].insert(i);}build(1,1,n);int cnt = 0;int cntq = 0;while(m--){int op;cin>>op;if(op == 1){int x,y;cin>>x>>y;x ^= cnt,y ^= cnt;auto it = mp[a[x]].lower_bound(x);//删除及插入时,需修改后继信息并在线段树中更新,修改过程类似链表(其实就是)auto it2 = mp[a[x]].upper_bound(x);if(it2 != mp[a[x]].end()){pre[*it2] = pre[x];modi(1,1,n,*it2,a[*it2]);}mp[a[x]].erase(it);it = mp[y].lower_bound(x);pre[x] = it == mp[y].begin() ? 0 : *prev(it);if(it != mp[y].end()){pre[*it] = x;modi(1,1,n,*it,a[*it]);}mp[y].insert(x);a[x] = y;modi(1,1,n,x,y);}else{cntq++;int l,r,k;cin>>l>>r>>k;l ^= cnt,r ^= cnt,k ^= cnt;if(l == r){cout<<"Yes\n";cnt++;continue;}S q = query(1,1,n,l,r,k);bool f = !k && !q.gcd || k && q.mx == q.mn + 1ll * (r - l) * k && q.gcd % k == 0 && q.pos < l;cout<<(f ? "Yes" : "No")<<'\n';cnt += f;}}return 0;
}

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

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

相关文章

instanceof(类型)

instanceof(类型)instanceof(检测左侧的对象是否为右侧类或接口的实例) public class Main {public static void main(String[] args){//方法的调用只和左边定义的数据类型有关Object object=new teacher();System…

高级程序语言设计第5次

这个作业属于:https://edu.cnblogs.com/campus/fzu/gjyycx 这个作业的要求:https://edu.cnblogs.com/campus/fzu/gjyycx/homework/14581 学号:102500416 姓名:王浩宇 第一部分 1.2. 尽力了,老师3.4.第二部分书本作…

25.11.11 spfa算法

SPFA算法 1.SPFA 是 Bellman-Ford 算法 的一种优化算法,用来求解 带权有向图 中 单源最短路径(可以有负权边,但不能有负权回路)。 2.算法流程: 以源点 s 为起点: (1)初始化 dist[i] = INF,dist[s] = 0; (2)建立…

什么是glTF,与glb的区别,规格和优点,通俗易懂地解释下载获取

​ 近年来,在网站和应用程序上查看 3D 内容的机会迅速增加。 无论是在三维空间中传达产品吸引力的电子商务网站,还是在虚拟空间中交互的元宇宙,还是将信息叠加在现实世界中的增强现实 (AR),3D 技术都在发展我们的…

CF2164E Journey 题解

Hint1 考虑存在欧拉回路的充要条件。Hint2 当我们想在 $(u, v)$ 点间进行传送时,如何计算最小的代价呢?Hint3 相信你已经通过 Hint2 想到建重构树了,那么不妨试试通过贪心算出答案。转化之后题目要求的就是原图的一…

算法训练之BFS解决最短路径难题

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

ASP.NET Core Authorization: 跳过JWT校验

本文记录了如何在asp.net core 9.0上为WebApi配置跳过JWT校验的方法。 项目准备 执行以下命令dotnet new webapi --use-minimal-apis --name MockJwtTestApi --output MockJwtTestApi --auth None dotnet add package …

学习昇腾硬件软件产品名称

应用使能(层级位于MindSpore等框架之上)摘录官网介绍:MindSpeed是一款专为昇腾平台打造的高性能加速库,涵盖了MindSpeed Core亲和加速模块、MindSpeed LLM套件、MindSpeed MM套件以及MindSpeed RL套件这四个重要组…

实用指南:[linux仓库]信号保存[进程信号肆]

实用指南:[linux仓库]信号保存[进程信号肆]2025-11-11 21:08 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: bl…

v4l2_subdev和video_device区分

相关规则video_device是用户空间可见的设备节点,如摄像头、编解码器; v4l2_subdev是不可见于用户空间的中间硬件模块,比如sensor、ISP一个实体硬件(entity),也可以是 video_device或者v4l2_subdev;两者的结构体…

第七天 设计用例方法

设计用例方法共十种 其中七种为黑盒测试方法:等价类、边界值、判定表、状态迁移法、场景法、因果图和正交表 经验测试法三种:错误推测法、异常分析法、随机测试法 作用: (1)单个功能适合:等价类、边界值主要针对…

AT_agc034_c [AGC034C] Tests

不知道为什么今天的题目都不是很想写代码。 首先感受一下,你会发现 \(c_i\) 在高桥优势大的时候肯定取 \(r_i\),否则取 \(l_i\)。 然后你发现仍然不是很好做,考虑二分一下操作数。 到了这个时候开始初现端倪了,你发…

论安慰人

时常受伤,更多自己默默舔舐伤口,难以和别人建立深层连接。我们生活在这样的背景的社会中,安慰别人是个需求旺盛、实施困难的高精端技术活。以“安慰人”为引子,总结一下个人和别人建立亲密关系的原则和技巧。 说简…

电商运营每天在忙啥?拆解4个核心工作,新手也能照做 - 智慧园区

电商运营每天在忙啥?拆解4个核心工作,新手也能照做

102302112王光诚作业2

作业①: 要求:在中国气象网(http://www.weather.com.cn)给定城市集的7日天气预报,并保存在数据库。 运行结果:点击查看代码 import sqlite3 import requests from bs4 import BeautifulSoup from datetime import …

详细介绍:LLaMA-Factory实战优化进阶

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

ch3题解

A_数组逆序重放代码: #include <bits/stdc++.h> using namespace std; // #include <stdio.h>// 题意:数组逆置 int main() {int a[110];// 1 < n < 100int n; scanf("%d", &n);for…

2025年11月全日制艺考生文化课新推荐:聚焦全日制艺考生文化课培训/全日制艺考生文化课机构/核心考点攻坚与沉浸式教学

文化课已成为艺考生升学路上的关键支撑,2025 年相关培训需求持续升温。艺术生因长期专注专业课,常面临文化课基础薄弱、复习时间紧张、知识断层等问题,选择适配的全日制培训机构成为高效提分的关键。本次榜单聚焦深…

2025年11月镀锌板品牌新榜:聚焦HC300DPD+Z镀锌板//镀锌花纹板/热镀锌花纹板/Q345B镀锌花纹板全产业链优势!

随着建筑装饰、机械制造等领域对防腐材料需求同比增长超 30%,镀锌板市场迎来品质升级浪潮。天津作为冶金重镇,聚集了一批兼具技术实力与服务能力的优质企业。本次结合产品性能检测、市场口碑调研及交付效率评估,筛选…

[随笔]关于意识形态

Q.什么是意识形态? A.这是马克思的所有继承者中观点最为分裂不一的问题。一个事实是,马克思对这个词主要进行了否定性的使用。但是在此,不妨以一个更为中性和宽广的定义开始我们的讨论:它是现实矛盾在思想层面所最为…