问个问题
  • 板块灌水区
  • 楼主Spook
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/10/20 20:35
  • 上次更新2023/11/2 12:26:52
查看原帖
问个问题
637250
Spook楼主2023/10/20 20:35

rt,怎么让他不CE

#include<bits/stdc++.h>
using namespace std;
template<typename SB>
struct BList{//Bi-directional Linked List双向链表
	struct value{SB v;int las,net;};
	int front,back,index,n;
	vector<value> List;
	BList(){
		List.clear();
		List.push_back({0,0,0});
		List.push_back({0,0,2});
		List.push_back({0,1,0});
		front=1,back=2,n=2,index=0;
	}
	BList(int len,SB func){
		List.clear();
		List.push_back({0,0,0});
		List.push_back({0,0,2});
		List.push_back({0,1,0});
		front=1,back=2,n=2,index=0;
		while(len--)add_back(func);
	}
	BList(BList<SB> &BList2){List=BList2.List,front=BList2.front,back=BList2.back,index=BList2.index,n=BList2.n;}
	BList(vector<SB> &vec){
		List.clear();
		List.push_back({0,0,0});
		List.push_back({0,0,2});
		List.push_back({0,1,0});
		front=1,back=2,n=2,index=0;
		for(int i=vec.size-1;i>=0;i--)add_front(vec[i]);
	}
	const SB operator+=(SB val){
		List.push_back({val,List[back].las,back}),n++;
		List[List[back].las].net=n;
		List[back].las=n;
	}
	inline void add_back(SB val){
		List.push_back({val,List[back].las,back}),n++;
		List[List[back].las].net=n;
		List[back].las=n;
	}
	inline void add_front(SB val){
		List.push_back({val,front,List[front].net}),n++;
		List[List[front].net].las=n;
		List[front].net=n;
	}
	inline void add_index_back(SB val,int index){
		List.push_back({val,index,List[index].net}),n++;
		List[List[index].net].las=n;
		List[index].net=n;
	}
	inline void add_index_front(SB val,int index){
		List.push_back({val,List[index].las,index}),n++;
		List[List[index].las].net=n;
		List[index].las=n;
	}
	inline void omit_index(int index){//断开链接
		if(List[List[index].las].net==index)List[List[index].las].net=List[index].net;
		if(List[List[index].net].las==index)List[List[index].net].las=List[index].las;
	}
	inline void erasure_index(int index){//彻底删除
		omit_index(index);
		swap(List[index],List[n]);
		List.pop_back(),n--;
	}
	const value &operator[](int index){return List[index];}
//	SB operator+=(SB &val){
//		List.push_back({val,List[back].las,back}),n++;
//		List[List[back].las].net=n;
//		List[back].las=n;
//	}
//	void operator-=(SB val){erasure_index(List[back].las);}
//	BList<SB> operator-(int index){
//		BList
//	}
};
template<typename SB>
istream &operator>>(istream &in,BList<SB> &a){
	a.init();
	int n,func;
	in>>n;
	for(int i=1;i<=n;i++)in>>func,a.add_back(func);
	return in;
}
template<typename SB> 
ostream &operator<<(ostream &out,BList<SB> &a){
	a.index=a[a.front].net;
	while(a[a.index].net){
		out<<a[a.index].v<<' ';
		a.index=a[a.index].net;
	}
	out<<endl;
	return out;
}
BList<int> fuc={1,2,3,4};
signed main(){
	cout<<fuc;
	return 0;
}
2023/10/20 20:35
加载中...