首页 > 其他分享 >[Ynoi2013] 大学

[Ynoi2013] 大学

时间:2024-03-14 17:48:16浏览次数:30  
标签:findfa texttt 删除 fa 复杂度 Ynoi2013 大学 我们

非常好之 \(\texttt{lxl}\) 使我的代码旋转。

看到这个题,第一反应显然是如果我们能够每次确切的找到要除的数,然后用树状数组进行单点修改,那么就可以达到 \(\mathcal{O}( n\log V \log n)\) 的复杂度。

那么接下来就是考虑如何去找到能除的数。

首先,我们不难想到对于每个权值 \(v\),将他在数组中所有的倍数开一个 \(\texttt{vector}\) 存起来。容易发现,一个数因子个数大概在 \(\log ^2 n\) 级别,所以这样没有问题(当然应该用埃筛的思想进行储存,否则会被卡常)。

然后,我们发现,经过一次操作之后,我们需要将对应倍数的数进行删除。也就是说,当我们要除以 \(x\) 时,我们就会对对应的 \(x\) 中的元素进行遍历,如果当前遍历到的数因为前面的 \(x'\) 已经不是 \(x\) 的倍数了,那我们就把他从这个 \(\texttt{vector}\) 中删除,从而来保证复杂度。否则的话,就暴力树状数组修改。

接下来就是如何维护删除。由于我们每次是对 \(l,r\) 进行操作,所以我们需要先二分查找到第一个大于等于 \(l\) 的位置进行操作,故不能使用链表。

一个好的解决方法时平衡树,但是 \(\texttt{lxl}\) 他不同意,所以考虑传统艺能并查集,用并查集去维护删除的数(一个很常见的 \(\texttt{trick}\) 我竟然不知道)。

例如,对于每一个序列下标开一个 \(\texttt{father}\),例如有四个数时: \(1,2,3,4\),最初都完整的存在。

然后,如果我们要删除 \(3\),我们就考虑 \(fa_{findfa{3}}=findfa(3+1)\),\(fa\) 数组也就变成了 \(1,2,4,4\)。

也就是说删除 \(i\) 的时候,我们就令 \(fa_{findfa(i)}=findfa(i+1)\)。

枚举的时候,\(i\) 的下一个就是 \(findfa(i+1)\)。

这样就可以规避掉删除的问题,不用去维护平衡树,并得到时间复杂度的保证,以及要将 \(x=1\) 的情况直接特判掉。

给一下核心代码吧:

for (int i = findroot(x, (lower_bound(p[x].begin(), p[x].end(), l) - p[x].begin())); i < p[x].size() && p[x][i] <= r; i = findroot(x, i + 1))
{
	int now = i;
	if(a[p[x][now]] % x == 0) add(p[x][now], a[p[x][now]] / x - a[p[x][now]]), a[p[x][now]] /= x;
	else fa[x][now] = findroot(x, now + 1);
}

\(\texttt{Submission}\)

标签:findfa,texttt,删除,fa,复杂度,Ynoi2013,大学,我们
From: https://www.cnblogs.com/SFsaltyfish/p/18073538

相关文章

  • 学生考勤系统|基于Springboot的大学生考勤系统设计与实现(源码+数据库+文档)
    大学生考勤系统目录目录基于Springboot的大学生考勤系统设计与实现一、前言二、系统功能设计三、系统实现1、系统登录注册2、管理员功能模块四、数据库设计1、实体ER图 2、具体的表设计如下所示:五、核心代码 六、论文参考 七、最新计算机毕设选题推荐八、源码......
  • 当HR问你:“做一下自我介绍”你该怎么回答?【文章底部添加进大学生就业交流群】
    目录当HR在面试中请你做自我介绍时自我介绍是给面试官留下第一印象的重要环节当HR在面试中请你做自我介绍时他们通常是想要了解你的背景信息、工作经验以及你认为自己适合这个职位的原因。以下是一些回答这个问题的建议,帮助你制作一个全面而精炼的自我介绍:1.开场白:以简......
  • 西北师范大学956软件工程(张海藩)名词解释、简答题、画图题汇总(部分)
    文章目录一:名词解释总结(1)传统软件工程部分A:非常重要B:可以了解(2)面向对象设计部分二:简答题总结(1)传统软件工程部分A:非常重要B:可以了解(2)面向对象设计部分A:非常重要B:可以了解三:画图题总结(1)概要(各章图形及对应符号)A:传统软件工程部分B:面向对象部分(2)着重考察画法的图完......
  • java毕业设计五邑大学超市网上销售软件设计(Springboot+mysql+jdk1.8+maven3.39)
    本系统(程序+源码)带文档lw万字以上 文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义选题背景:随着互联网技术的飞速发展,电子商务已经成为现代商业活动中不可或缺的一部分。特别是网上超市销售业务,它借助网络平台突破了传统购物的时间和空间限制,为消......
  • 毕业半年多了,回顾从大学到现在搞过的很有意思的开源项目
    毕业半年多了,回顾从大学到现在搞过的很有意思的开源项目回想当年,在高考结束后我的分数并不高,然后被调剂到了工业设计,再到后来感觉对计算机更感兴趣,于是对了很久的线努力转专业到了计算机,之后废了九牛二虎之力在大二一年修完了计算机专业大一大二两年的课程,到了大三开始搞事就开始......
  • 01.基于javaEE_大学生就业信息管理系统源码
    基于javaEE_大学生就业信息管理系统:本系统分系统管理员,教师用户,企业用户和毕业生用户4个用户角色。**系统管理员主要功能有系别管理、专业管理、老师管理员管理、站内新闻管理、企业用户管理、岗位管理、文档管理、公告管理、留言管理、就业查询统计(包括就业情况查询,区域分布统......
  • 山东大学23强基班计算机导论第一次习题答案
    山东大学23强基班计算机导论第一次习题答案T1.#include<stdio.h>intmain(){printf("HelloWorld!");return0;}T2.#include<stdio.h>intmain(){printf("Programmingisfun.\nAndProgramminginCisevenmorefun!&qu......
  • 2023年第十四届蓝桥杯大赛软件类省赛Java大学B组真题
    2023年第十四届蓝桥杯大赛软件类省赛Java大学B组真题C.数组分割思路:因为最后要是分为2组偶数。由于偶数+偶数=偶数,奇数+奇数=偶数。那么我们的奇数个数一定要是偶数个。如果奇数个数为奇数个那直接就不行了,答案是0。如果奇数的个数是偶数的话,假设偶数n个,奇数m个。\(C_{n}^{0}+......
  • [转载]pip 下载安装时使用清华大学镜像(各种国内源配置)
    版权声明:本文为博主原创文章,遵循CC4.0BY-SA版权协议,转载请附上原文出处链接和本声明。原文链接:https://blog.csdn.net/sjjsaaaa/article/details/110096059————————————————清华镜像地址:https://pypi.tuna.tsinghua.edu.cn/simple例如:假设要安装numpy......
  • P5609 [Ynoi2013] 对数据结构的爱
    题面传送门好像搞了个神秘做法。考虑离线扫描线,用一个fhq-Treap维护所有的询问现在长什么样,然后每次操作就整体加\(A_i\),\(\geqp\)的减去\(p\),这个可以分裂之后打整体标记,然后用那个值域相交的fhq-Treap合并实现。然后你发现这样就过了。构造一下卡不掉,于是考虑给这个......