笔记-压行
前置知识: C++ \texttt{C++} C++语言。
参考文献
暂无。
Introduction \texttt{Introduction} Introduction
写些特别长的代码的时候,往往需要压行,压行使得你可以对你的程序一眼看到全貌,压行也有很多技巧。
Explanation \texttt{Explanation} Explanation
什么是压行?看压过行的代码:
#include <bits/stdc++.h>
using namespace std;
//&Start
#define lng long long
const int inf=0x3f3f3f3f;
const lng Inf=1e16;
//&Start
bool open(0);
#define Debug if(open)
//&Splay
template<int N,class T>struct Splaytree{
int sz,rt,sm[N],mk[N],fa[N],ch[N][2],len,q[N];T key[N];
void clear(int x){
sm[x]=mk[x]=fa[x]=ch[x][0]=ch[x][1]=key[x]=0;}
bool dire(int x){
return ch[fa[x]][1]==x;}
void pushup(int x){
sm[x]=(x>0)+sm[ch[x][0]]+sm[ch[x][1]];}
void pushdown(int x){
if(mk[x]) mk[x]=0,mk[ch[x][0]]^=1,mk[ch[x][1]]^=1,swap(ch[x][0],ch[x][1]);}
void connect(int x,int f,bool d){
fa[x]=f,ch[f][d]=x;}
int newnode(T v,int f){
return clear(++sz),key[sz]=v,fa[sz]=f,sm[sz]=1,sz;}
void rotate(int x){
int f=fa[x],ff=fa[f],dx=dire(x),df=dire(f);
connect(ch[x][dx^1],f,dx),connect(f,x,dx^1),connect(x,ff,df),pushup(f),pushup(x);
}
void splay(int x,int ff){
for(int i=(len=0)+x;i;i=fa[i]) q[++len]=i; for(int i=len;i>=1;i--) pushdown(q[i]);
for(int f;(f=fa[x])!=ff;rotate(x))if(fa[f]!=ff) rotate(dire(x)==dire(f)?f:x); if(!ff) rt=x;
}
void insert(T v){
int x=rt,f=0; while(x) f=x,x=ch[f][v>key[f]];
if(f) ch[f][v>key[f]]=sz+1; splay(newnode(v,f),0);
}
int kth(int k