tg 92 solution

T1

首先看出第一步
枚举每个数作为最大公约数,
把边权为当前数now的倍数拿出来维护连通性
如果从大到小枚举now的话,第一次满足询问两点连通的now就是这次询问的答案

然后考虑优化上述过程
bitset维护这些边出现的所有点
然后对于每个出现的点,bitset维护每个询问,
每一位是1表示和这个点有一个还没有得到合法答案的询问
然后当前点每个询问的另一个点必须也在这个集合
此时bitset一个按位与就是交集
然后我们处理的询问就可以直接找出来了
直接搞这样的询问,并查集维护每组询问两个点是不是连通的
如果连通那就更新答案

早就知道bitset有叫做_Find_first()/_Find_next就直接拿了搞T2没准就切了

Brute Force
暴力时间复杂度还有常数没收住
写的太烂和别人暴力一比少20

T2

上次做过一个区间cos
这次来个区间求φ

正解隔壁势能分析线段树
zasdcn写的确实可以所以就扔上去了

考虑φ单次变化,奇数变偶数,偶数至少除2
2很好啊?直接暴力搞这个东西,时间复杂度O(nlogn)
然后等这个y变成1以后就相当于给x区间加个1
然后线段树上暴力就好了

奇人轶事
我维护了两棵线段树分别针对x和以及y的和
for循环分支判断每个位置是否满足y=1
然后别的都是对的

最后我发现,虽然确实只会修改差不多3e6
但是我暴力判断直接就废了

后来把`for`换成维护没有变$1$一个`set`$70$
然后发现我现在时间复杂度确实是对的,但是线段树常数太大
我修改3e6次直接就寄了

后来看到y修改点修区查换了树状数组过了

赛时写的是直接拿for搞的只有40
后来把for换成维护没有变1的一个set70
后来维护y的数据结构从线段树换成树状数组,这才过
没错我就是那个傻逼

T3

扫描线

好像有一个套路就是每次加一列删一列
考虑到列宽这个必须靠枚举了所以考虑尽可能少枚举列
然后就如果比较瘦就翻转一下
这样时间复杂度O(nmnm)

考虑后续过程
一个区域𝑃的答案是max𝑃𝑠𝑖𝑧𝑒(𝑃)𝑖,𝑗𝑃𝑎𝑖,𝑗
我们现在相当于转化为了序列上的问题:
统计所有子区间的和的和以及最大值乘区间长度之和,
后者可以对序列建笛卡尔树处理,
即在每个节点处处理左端点在左子树以及右端点在右子树的子区间,
相当于固定了区间最大值。

T4

树上差分
说句闲话

posted @   2K22  阅读(18)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
点击右上角即可分享
微信分享提示