whhsteven @ 2022-11-20 13:40:37
本人在浏览题解区时发现 这篇题解 是不使用 splay 树但是采用了将区间左右端点旋转到位后打标记的做法的唯一一篇。
具体地,他是先建出类似线段树的结构,然后每次修改时,将
正确性没有问题。但是复杂度对不对呢?这样的数据可以将其卡掉:
区间长度
实测这篇题解的代码在我的机子上跑这组数据的时间稳定在 20 秒以上,这是比较符合没有完全卡满的
实际上,通过输出树的形态可以发现,在执行完前
by whhsteven @ 2022-11-20 13:41:53
在我机子上测试时的编译选项是 -std=c++14 -O2
,并已开够栈。
by whhsteven @ 2022-11-20 13:43:06
数据生成器:
#include<bits/stdc++.h>
using namespace std;
namespace acah
{
ofstream gen("data.in");
int work()
{
gen << "100000 100000\n";
for(int i = 1; i <= 50000; i++) gen << i * 2 - 1 << ' ' << i * 2 << '\n';
for(int i = 1; i <= 50000; i++) gen << i * 2 - 1 << ' ' << i * 2 << '\n';
cout << "Generated!";
return 0;
}
}
int main() {return acah::work();}
by whhsteven @ 2022-11-20 13:49:14
@dottle
@小粉兔
by Konjac_16 @ 2022-11-21 07:29:58
@dottle
by lcyxds @ 2022-11-28 15:34:57
看了下题解好像是由来已久的 Spaly 树?Spaly 能过绝大多数平衡树题出题人都不往这个方向卡(