求问封装数据结构对于运行效率的影响

站务版

附上奇丑无比的代码: ``` #include<cstdio> using namespace std; inline int min(const int &a,const int &b) {return a<b?a:b;} inline int abs(const int &x) {return x<0?-x:x;} struct splay_tree { struct node { int val,n,tot,f,son[2]; }tr[110000]; int len,root; #define xx tr[x] #define gf tr[f].f void update(int x) {xx.tot=tr[xx.son[0]].tot+tr[xx.son[1]].tot+xx.n;} void add(int val,int fa) { tr[++len]=(node){val,1,1,fa,0,0}; tr[fa].son[val>tr[fa].val]=len; } void connect(int son,int fa,int dir) { tr[fa].son[dir]=son; if(son)tr[son].f=fa; } void rotate(int x,int w) { int f=xx.f; connect(xx.son[w],f,1^w); connect(x,gf,f==tr[gf].son[1]); connect(f,x,w); update(f); update(x); } void splay(int x,int rt) { while(xx.f!=rt) { int f=xx.f; if(gf==rt)rotate(x,x==tr[f].son[0]);else if(tr[gf].son[0]==f&&tr[f].son[0]==x){rotate(f,1);rotate(x,1);}else if(tr[gf].son[1]==f&&tr[f].son[1]==x){rotate(f,0);rotate(x,0);}else if(tr[gf].son[0]==f&&tr[f].son[1]==x){rotate(x,0);rotate(x,1);}else /*if(tr[gf].son[1]==f&&tr[f].son[0]==x)*/{rotate(x,1);rotate(x,0);} } if(!rt)root=x; } int pos(int val) { int x=root; while(xx.val!=val) if(val<xx.val) if(xx.son[0])x=xx.son[0]; else break; else if(xx.son[1])x=xx.son[1]; else break; return x; } void ins(int val) { if(!len){add(val,0);root=1;return;} int x=pos(val); if(xx.val==val) { xx.n++; update(x); splay(x,0); } else { add(val,x); update(x); splay(len,0); } } int prev(int val) { int x=pos(val);splay(x,0); if(val<xx.val&&xx.son[0]) for(x=xx.son[0];xx.son[1];x=xx.son[1]); if(val<xx.val)return 0; return x; } int next(int val) { int x=pos(val);splay(x,0); if(val>xx.val&&xx.son[1]) for(x=xx.son[1];xx.son[0];x=xx.son[0]); if(val>xx.val)return 0; return x; } }tr; int main() { int n,a,ans=0; scanf("%d",&n); while(n--) { scanf("%d",&a); int l=tr.prev(a),r=tr.next(a); if(l) if(r) ans+=min(abs(tr.tr[l].val-a),abs(tr.tr[r].val-a)); else ans+=abs(tr.tr[l].val-a); else if(r) ans+=abs(tr.tr[r].val-a); else ans+=a; tr.ins(a); } printf("%d",ans); return 0; } ```
by MZW_BG @ 2019-07-09 11:53:19


(原题为P2234) ~~完了我觉得我越来越像小学生了~~
by MZW_BG @ 2019-07-09 11:53:58


用内联可以优化
by 樱花飞舞 @ 2019-07-09 11:58:42


@[MZW_BG](/space/show?uid=97504) 封装的话只要没有多态啥的应该也不会太慢吧。窝的LCT似乎速度还行?[记录](https://www.luogu.org/recordnew/show/16080570)
by 小菜鸟 @ 2019-07-09 12:05:55


@[MZW_BG](/space/show?uid=97504) ~~快用指针啊~~
by hovny @ 2019-07-09 12:08:32


~~事实表明我封装的线段树比分块慢QAQ~~
by Nickel_Angel @ 2019-07-09 12:11:03


这个和封装没关系的,总体常数大,自行优化一下吧。
by 小粉兔 @ 2019-07-09 13:03:39


几乎没关系吧
by SSerxhs @ 2019-07-09 13:22:38


connect还封装。。。不t就有鬼了
by SSerxhs @ 2019-07-09 13:23:32


@[SSerxhs](/space/show?uid=29826) 打着好看嘛QAQ
by MZW_BG @ 2019-07-09 13:36:25


| 下一页