不是双倍经验我会去
\(debug\)一上午?
一开始我是用的
\(map+string\),跑的太慢了,T了4个点。
后来我手写了
\(string\),重载了小于号,依然用的
\(map\),T了2个点。
然后我加入各种卡常,发现没有用。
\(\cdots\) 然后我把手写
\(string\)改成字符串哈希,依然用
\(map\)存,还是
\(T\)了2个点。
然后继续各种优化,没有用。
然后去看
\(yyb\)聚聚的题解,原来可以每操作几百次随机
\(Splay\)一下来保证树的随机性,只
\(T\)了一个点了。
我去
\(BZOJ\)离线题库上把这题数据下载下来,我觉得应该是最大的那个极限数据
\(n=250000\)的点T了。
于是开文件本机上了试了下,跑了
\(1.03-1.2s\)之间。
然后我疯狂改随机数种子,发现根本没什么用。
\(\cdots\) 后来又把
\(map+\)字符串哈希改成了字典树,跑的飞快
最大的点本机
\(0.7s\)左右,没理由跑不过啊
但交到洛谷上还是T
交到BZOJ上还是T
交到CJOJ上还是T
交到CodeVS上还是T
诶,CodeVS上显示TLE的点,
\(n=130000\) ???????
于是找到
\(BZOJ\)数据里的那个点,woc
原来有人的分数超过了
\(999999999\),也就是我设的
\(INF\),也就是
\(Splay\)中2个虚点的值。
\(\cdots\) 直接超过了,这也太猛了。
然后虚点不是最大了,
\(GG\)了。
看来
\(INF\)还是要写成
\(2147483647\)啊。
果然,改了
\(INF\)后跑的飞快,总共才跑了
\(479ms\)吊打pbds 突然发现\(Splay\)好容易写
#include #include #include #include #include #include #include