「WC2014-紫荆花之恋」题解

news/2025/10/27 19:24:34/文章来源:https://www.cnblogs.com/LastKismet/p/19169927

P3920 [WC2014] 紫荆花之恋

sol

首先如果不带修的话就是点分治板子,带修的话就是动态点分树板子。

由于写过一篇动态点分树的博客,这里就对动态点分树部分不详细讲解了,主要讲一下信息维护吧。不会的话可以点进去先看一下。

理论上来说,应当使用平衡树,可以使得全局复杂度为 \(O(n\log^3n)\),但平衡树又难写常数又大,因此考虑根号数据结构。

式子推一下就是一维偏序条件,那么这个数据结构必须实现插入并查询排名的功能。考虑大小链,大链有序,小链无序,每次大链二分小链遍历。如果小链大小超过阈值直接和大链归并排序即可,阈值设做 \(\sqrt n\) 可以做到 \(O(n\sqrt n)\) 的复杂度。整体复杂度是 \(O(n\sqrt n\log^2 n)\),实际上跑得特别快。

然后就没什么了,就是个动态点分树板子。

code

const int N=1e5+5,V=1e9,B=320;
const flt A=0.8;int n;
struct sq{vec<ll> big,sml,t;inline void ins(ll x){sml.pub(x);if(sml.size()>B){int a=0,b=0;t.clear();sort(sml.begin(),sml.end());while(a<big.size()&&b<sml.size())t.pub(big[a]<sml[b]?big[a++]:sml[b++]);while(a<big.size())t.pub(big[a++]);while(b<sml.size())t.pub(sml[b++]);sml.clear();big=t;}}inline ll query(ll v){int res=upper_bound(big.begin(),big.end(),v)-big.begin();for(auto i:sml)if(i<=v)++res;return res;}inline void clear(){big.clear(),sml.clear();}
}dat[N],daf[N];int Fa[N];
vec<pil> g[N];
ll r[N];
vec<int> son[N],grd[N],grl[N];bool don[N];int siz,sz[N];
void gsiz(int x,int f){sz[x]=1;for(auto e:g[x]){int y=e.fir;if(!don[y]&&y!=f)gsiz(y,x),sz[x]+=sz[y];}
}
int rot,mx[N];
void grot(int x,int f){mx[x]=siz-sz[x];for(auto e:g[x]){int y=e.fir;if(!don[y]&&y!=f)grot(y,x),chmax(mx[x],sz[y]);}if(mx[x]<mx[rot])rot=x;
}
void dfs(int x,int f,int z,int dp){dat[z].ins(dp-r[x]);if(Fa[z])daf[z].ins(grl[x].back()-r[x]);grd[x].pub(z),grl[x].pub(dp);son[z].pub(x);for(auto e:g[x]){int y=e.fir;if(!don[y]&&y!=f)dfs(y,x,z,dp+e.sec);}
}
void calc(int x,int fa){gsiz(x,x);siz=sz[x];mx[rot=0]=inf;grot(x,x);x=rot;Fa[x]=fa;for(auto e:g[x]){int y=e.fir;if(!don[y])dfs(y,x,x,e.sec);}dat[x].ins(-r[x]);if(fa)daf[x].ins(grl[x].back()-r[x]);don[x]=1;for(auto e:g[x]){int y=e.fir;if(!don[y])calc(y,x);}
}inline void Main(){int T;cin>>T>>n;ll ans=0;rep(i,1,n){int a,c;cin>>a>>c>>r[i];a^=ans%V;if(!a){dat[1].ins(-r[i]);}else{g[a].pub({i,c}),g[i].pub({a,c});Fa[i]=a;grd[i]=grd[a],grl[i]=grl[a];grd[i].pub(a),grl[i].pub(0);for(auto &j:grl[i])j+=c;repl(j,0,grd[i].size()){int x=grd[i][j];ans+=dat[x].query(r[i]-grl[i][j]);if(j)ans-=daf[x].query(r[i]-grl[i][j-1]);son[x].pub(i);dat[x].ins(grl[i][j]-r[i]);if(j)daf[x].ins(grl[i][j-1]-r[i]);}dat[i].ins(-r[i]);daf[i].ins(c-r[i]);repl(j,1,grd[i].size())if(son[grd[i][j-1]].size()*A<son[grd[i][j]].size()){int x=grd[i][j-1],f=Fa[x];don[f]=1;for(auto y:son[x]){while(1){int t=grd[y].back();grd[y].pob(),grl[y].pob();if(t==x)break;}son[y].clear();don[y]=0;dat[y].clear(),daf[y].clear();}son[x].clear();don[x]=0;dat[x].clear(),daf[x].clear();calc(x,f);break;}}put(ans);}
}

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

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

相关文章

2025.10.27C 城堡考古 题解

有同学让我造福人类,所以来写一篇。考虑显然没有什么通项公式可以利用的,但是注意到 \(m\) 仅仅只有小小的 \(6\),考虑状压 \(dp\) 的思路。设 \(dp_{i,j}\) 表示当前已经排了 \(i\) 列,状态为 \(j\) 的方案数,其…

【密码学实战】openHiTLS PKCS12命令行程序: PKCS12文件生成与解析

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

[xp] GVim v9.0.494 (or thereabouts) is the last version known to support Windows XP.

下载地址:https://github.com/vim/vim-win32-installer/releases/tag/v9.0.0494If you need the last version of GVim (the GUI build of Vim) that officially supports Windows XP, here’s what I found — and s…

线段树;区间求和优化

线段树;区间求和优化线段树构造: 线段树:4*空间 第一种: #define maxn 100007//元素个数 int SegTree[maxn << 2];//线段树 // int lazy[maxn << 2];//延迟更新 int A[maxn];//原是数组第二种:结构体…

实用指南:2.CSS3.(2).html

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

「CTSC2017-游戏」题解

题解记录P3772 [CTSC2017] 游戏 sol 首先,由期望的线性性,把贡献拆到单点上,对每一场计算其胜利的概率即可。 首先已知的局可以不管,未知的局,显然只与其两侧最近的已知局有关。后面运用的一些概率表达在题面最下…

谢谢你周医生

谢谢你 周敏,张景     南京很美,想起你们我的心也很温暖

想让默认头像不再千篇一律,就顺手复刻了一下 GitHub 的思路

探索如何让默认头像不再千篇一律,我用 Go 复刻了 GitHub 风格的头像生成逻辑,根据输入生成独一无二的方块头像。文章分享了实现原理、效果展示以及未来扩展的思路在各种平台上,初始注册的用户通常都会被分配一个默认…

来源未知

点击查看代码 from PIL import Image# 定义字符集合 ascii_char = list("$@B%8&W#*oahkbdpqwmZO0QLCJYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,\"^`. ")def get_char(r, g, b, alpha=256):if a…

10.27(补)

继承和多态的动手动脑整理的word补上 链接:[https://files.cnblogs.com/files/blogs/847692/20243732张博学课后作业4.zip?t=1761562926&download=true]

vue3 vue3-form-element表单生成工具 输入框增加后缀

JSON schema数据{"title": "测试注册表单","description": "A simple form example.","type": "object","properties": {"firstName&quo…

java(3)基础规范

Java对大小写敏感。 关键字class的意思是类。JAVA是面向对象的语言,所有代码必须位于类里面。 编译后的源文件,得到相应的字节码文件,编译器为每个类生成独立的字节码文件。 main方法是JAVA应用程序的入口方法。格式…

袁天罡称骨歌的评骨格歌诀 - 木易

二两一钱:男:此命非业谓大凶,平生灾难事叠重,凶祸频临陷逆境,终世困苦事不成。女:生身此命运不通,乌云盖月黑朦胧,莫向故园载花木,可来幽地种青松。二两二:男:此命推来真气人,身寒骨冷若伶仃,劳劳碌碌虚度…

stm32F411RETx系列无CAN的处理思路

CAN 考虑到STM32F411RETX系列根本没有CAN,这该怎么办呢? 我在网上搜索到了一个解决方法: 使用一个独立的 CAN控制器芯片(如 MCP2515,这是最常用的选择),通过 SPI接口与 STM32通信。STM32 作为主机,通过 SPI协议…

Date 10.27

在 Print 之前 到现在还是想不明白为什么不骗那显眼的 80pts。 赛时 420/500pts,T5放了道紫。 A - 玩数字P.S. \(n \le 10^{15}\) 唐题,可以 \(O(\sqrt n)\) 解决,中间进行数位分离即可,当然你也可以打表。 Code #…

20232402 2025-2026-1 《网络与系统攻防技术》实验三实验报告

1.实验内容 1.1 基础免杀技术测试​ (1)msfvenom 编码器免杀: 生成未编码与多次编码的反向连接恶意程序,分别复制到靶机,对比杀软拦截情况,验证编码器对特征码的混淆效果;​ (2)Veil 工具免杀: 通过 Veil 生…

读书日记3

6到10章深入探讨了编程中最基础的元素——变量和数据类型,让我看到了平凡中的非凡。 核心收获与深刻见解: 1.变量命名的艺术性:McConnell详细阐述了优秀变量名的特征——表达"什么"而不是"如何"…

2025年多商户商城代理招募加盟/多商户项目合伙人加盟最新推荐榜:多商户兼职项目合伙人/B2B2C商城代理招募公司/聚焦项目孵化与商户扶持能力深度解析

随着大众创业热潮持续升温,以及数字化商业模式的快速迭代,创业者在选择项目合作方时常常面临多重考量 —— 如何辨别企业项目的可行性、如何匹配自身资源的合作模式、如何降低创业初期的运营风险,成为当下创业者关注…

20232420 2025-2026-1 《网络与系统攻防技术》实验三实验报告

1.实验内容学会使用msf编码器,veil-evasion,利用shellcode编程,加壳等免杀工具或技巧。尝试实现恶意代码免杀。理解免杀机制和原理,认识到杀软局限性。2.实验过程 2.1 免杀效果参考基准 2.1.1 免杀效果的评价 用Vi…

掘金2025年:数字化商业浪潮下,如何选对平台与伙伴?一站式多商户商城系统推荐榜发布,多商户商城代理招募/多商户项目合伙人加盟/一站式开店代理项目加盟

随着数字化转型深入各行各业,个体创业与企业多渠道拓展需求激增,能够整合资源、快速部署、共享收益的多商户商城模式已成为市场新蓝海。2025年,预计相关平台与服务市场规模将持续扩大,但市场中项目质量、技术支撑与…