hack Splay!
查看原帖
hack Splay!
554746
yiming564楼主2024/9/20 00:09

我红温了,为了学 LCT,我得先学这个 Splay,

等我照着 oiwiki 学完 Splay 之后发现 Splay 查询排名的部分时间复杂度假了。

下面是 hack 程序


#include <bits/extc++.h>

#define inline __always_inline
const int n = 1e5, m = 5e4;

int main()
{
	freopen64("hack.in", "w", stdout);
	printf("%d\n", n);
	for (int i = 1; i <= m; i++)
		printf("1 %d\n", i);
	for (int i = m + 1; i <= n; i++)
		printf("3 0\n");
	return 0;
}

在做完插入之后树的形态是一条链,如果说之后的查询每次都 splay 稳住树的形态还好说,但 00 不是树的元素,而 oi-wiki 的代码:

int rk(int k) {
  int res = 0, cur = rt;
  while (1) {
    if (k < val[cur]) {
      cur = ch[cur][0];
    } else {
      res += sz[ch[cur][0]];
      if (!cur) return res + 1;		// 我红温了
      if (k == val[cur]) {
        splay(cur);
        return res + 1;
      }
      res += cnt[cur];
      cur = ch[cur][1];
    }
  }
}

漂亮,抬走吧,没救了。

所以我这个 hack 成功的 hack 了我的提交记录

大半夜发现模板的代码出锅真的太崩溃了,文化课作业还一点没写,QAQ

2024/9/20 00:09
加载中...