为啥我的程序跑得那么慢

P4008 [NOI2003] 文本编辑器

Splay本来常数就大,写丑了跑得慢很正常
by qwqKanade @ 2018-01-28 07:07:10


@[v天下第柒v](/space/show?uid=50202) 多谢dalao,但是蒟蒻还是疑惑:为啥别人写的splay跑那么快,我这个怎么跟西方记者那样慢,是哪里写挂了?
by GoldenPotato137 @ 2018-01-28 07:54:47


@[GoldenPotato](/space/show?uid=52563) 只是总体常数比较大。卡卡常,能快个一倍
by qwqKanade @ 2018-01-28 07:58:27


@[GoldenPotato](/space/show?uid=52563) 我的其它部分都和你差不多,应该是你的旋转常数大了..(我是不是在挖坟Orz) ``` void rotate(int x) { int y=s[x].fa; int z=s[y].fa; int k=x==s[y].ch[1]; s[z].ch[y==s[z].ch[1]]=x; s[x].fa=z; s[y].ch[k]=s[x].ch[k^1]; s[s[x].ch[k^1]].fa=y; s[x].ch[k^1]=y; s[y].fa=x; pushup(y); pushup(x); } void Splay(int x,int goal) { while (s[x].fa!=goal) { int y=s[x].fa; int z=s[y].fa; if (z!=goal) { (x==s[y].ch[0])^(y==s[z].ch[0])?rotate(x):rotate(y); } rotate(x); } if (goal==0) { root=x; } } ```
by ouuan @ 2018-09-29 11:37:02


@[ouuan](/space/show?uid=49742) 多谢回复。 但是我去康过了,我的旋转和你的基本上一样呀。
by GoldenPotato137 @ 2018-10-11 21:08:17


@[GoldenPotato](/space/show?uid=52563) 又不是WA了,常数问题本来就应该代码长得差不多吧..只不过我也不知道是不是这里的问题..但Splay大部分时间都在旋转,旋转常数稍大一点影响蛮大的。
by ouuan @ 2018-10-11 21:16:38


@[GoldenPotato](/space/show?uid=52563) 还有一个问题,就是你用的是多个数组,貌似结构体会快一些,因为内存连续?好像听说过这种玄学。
by ouuan @ 2018-10-11 21:18:38


|