笔记-压行

本文介绍了C++中四种压行技巧,包括野蛮横排、操作放回值、逗号返回值和巧用for语句,以提高代码的可读性和调试效率。通过实例详细解释了每种方法的使用场景和效果。
摘要由CSDN通过智能技术生成

笔记-压行

前置知识: 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
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值