「杂文」你好,新的世界!

大约一年半前,我写下了人生中的第一个程序:

『你好,世界!』

#include <bits/stdc++.h>
using namespace std;
int main() {
    puts("Hello World!");
    return 0;
}

但是,在大约半年前,我养成了一个坏习惯——压行
所以,直至今天,我的程序大多都长成这样:

#include <bits/stdc++.h>
#define N 100000
using namespace std;
struct Splay {
    int tot,rt,ch[N|1][2],fa[N|1],val[N|1],cnt[N|1],siz[N|1];
    void upd(int k) {   siz[k]=siz[ch[k][0]]+siz[ch[k][1]]+cnt[k];  }
    int get(int k) {    return k==ch[fa[k]][1]; }
    void ini(int k) {   ch[k][0]=ch[k][1]=fa[k]=val[k]=cnt[k]=siz[k]=0; }
    void rotate(int k,int o) {
        int dad=fa[k],gra=fa[dad],anc=fa[gra],son=get(k);
        if(o==0) { 
            ch[dad][son]=ch[k][son^1],fa[ch[dad][son]]=dad,ch[k][son^1]=dad,fa[dad]=k,fa[k]=gra;
            if(gra) ch[gra][ch[gra][1]==dad]=k; upd(dad),upd(k);
        } else if(o==1) {
            ch[gra][son]=ch[dad][son^1],fa[ch[gra][son]]=gra,ch[dad][son]=ch[k][son^1],fa[ch[dad][son]]=dad;
            fa[k]=anc,ch[k][son^1]=dad,fa[dad]=k,ch[dad][son^1]=gra,fa[gra]=dad;
            if(anc) ch[anc][ch[anc][1]==gra]=k; upd(gra),upd(dad),upd(k);
        } else {
            ch[gra][son^1]=ch[k][son],fa[ch[k][son]]=gra,ch[dad][son]=ch[k][son^1],fa[ch[dad][son]]=dad;
            fa[k]=anc,ch[k][son]=gra,fa[gra]=k,ch[k][son^1]=dad,fa[dad]=k;
            if(anc) ch[anc][ch[anc][1]==gra]=k; upd(gra),upd(dad),upd(k);
        }
    }
    void splay(int k) { for(int d=fa[k];d=fa[k];rotate(k,d==rt?0:get(k)==get(d)?1:2));  rt=k;   }
    void insert(int k) { 
        if(!rt) {   val[++tot]=k,cnt[tot]=1,rt=tot; return; }
        for(int cur=rt,d=0;;) {
            if(val[cur]==k) {   cnt[cur]++,upd(cur),upd(d),splay(cur);  break;  }   d=cur,cur=ch[cur][val[cur]<k];
            if(!cur) {  val[++tot]=k,cnt[tot]++,fa[tot]=d,ch[d][val[d]<k]=tot,upd(tot),upd(d),splay(tot);   break;  }
        } 
    }
    int rankof(int k) {
        for(int res=0,cur=rt;;) {
            if(k<val[cur]) {    cur=ch[cur][0]; continue;   }   res+=siz[ch[cur][0]];
            if(k==val[cur]) {   splay(cur); return res+1;   }   res+=cnt[cur],cur=ch[cur][1];
        }
    }
    int kthnum(int k) {
        for(int cur=rt;;) {
            if(ch[cur][0]&&k<=siz[ch[cur][0]]) {    cur=ch[cur][0]; continue;   }
            k-=cnt[cur]+siz[ch[cur][0]];    if(k<=0)    {   return val[cur];    }   cur=ch[cur][1];
        }
    }
    int getprev() { int cur=ch[rt][0];  while(ch[cur][1])   cur=ch[cur][1]; return cur; }
    int getnext() { int cur=ch[rt][1];  while(ch[cur][0])   cur=ch[cur][0]; return cur; }
    void delnod(int k) {
        rankof(k);  if(cnt[rt]>1) { cnt[rt]--;  upd(rt);    return; }
        if(!ch[rt][0]&&!ch[rt][1]) {    ini(rt);    rt=0;   return; }
        if(!ch[rt][0]) {    int dad=rt; rt=ch[rt][1];   fa[rt]=0;   ini(dad);   return; }
        if(!ch[rt][1]) {    int dad=rt; rt=ch[rt][0];   fa[rt]=0;   ini(dad);   return; }
        int x=getprev(),dad=rt; splay(x);   fa[ch[dad][1]]=x;   ch[x][1]=ch[dad][1];    ini(dad);   upd(rt);
    }
}   Tree;
int n,opt,num;
int main() {
    scanf("%d",&n);
    for(int i=1;i<=n;i++) {
        scanf("%d%d",&opt,&num);
        if(opt==1)  Tree.insert(num);
        if(opt==2)  Tree.delnod(num);
        if(opt==3)  printf("%d\n",Tree.rankof(num));
        if(opt==4)  printf("%d\n",Tree.kthnum(num));
        if(opt==5)  Tree.insert(num),printf("%d\n",Tree.val[Tree.getprev()]),Tree.delnod(num);
        if(opt==6)  Tree.insert(num),printf("%d\n",Tree.val[Tree.getnext()]),Tree.delnod(num);
    }
    return 0;
} 

而这些经过压行的程序,不仅不美观,反而会令人眼花缭乱、头皮发麻、放弃调试。

于是,我决定作出一些改变。
让我改掉压行的坏习惯,遵循大佬们的代码规范,写出崭新的程序吧!
下面的程序将是我向新世界迈出的第一步:

『你好,新的世界!』

#include <bits/stdc++.h>
using namespace std;
int main() {
    for (int i = 1; i <= 3; i++)
        puts("Hello,New World!");
    return 0;
} 

猜你喜欢

转载自blog.csdn.net/weixin_42068627/article/details/80373451
今日推荐