手写双链,除subtask#1全RE
查看原帖
手写双链,除subtask#1全RE
504403
VDLevUp楼主2023/9/7 19:52
#include<iostream>
#include<string>
using namespace std;
template<typename Tp>
class deque{
private:
	int sz;
	struct Node{
		Node *l,*r;
		Tp val;
	}*begin,*end;
public:
	deque(){
		sz=0;
		begin=new Node();
		end=new Node();
		begin->l=end->r=nullptr;
		begin->r=end;
		end->l=begin;
	}
	int size(){
		return sz;
	}
	bool empty(){
		return sz==0;
	}
	void push_back(Tp v){
		Node *p=new Node();
		p->val=v;
		p->r=end;
		end->l->r=p;
		end->l=p;
		sz++;
	}
	void push_front(Tp v){
		Node *p=new Node();
		p->val=v;
		p->l=begin;
		begin->r->l=p;
		begin->r=p;
		sz++;
	}
	void pop_front(){
		if(sz==0)
			return;
		sz--;
		Node *p=begin->r;
		begin->r=begin->r->r;
		delete p;
		p=nullptr;
	}
	void pop_back(){
		if(sz==0)
			return;
		sz--;
		Node *p=end->l;
		end->l=end->l->l;
		delete p;
		p=nullptr;
	}
	Tp front(){
		return begin->r->val;
	}
	Tp back(){
		return end->l->val;
	}
};
int n;
deque<int>d[(int)(1e6+10)];
int main(){
	cin.tie(0);
	cout.tie(0);
	ios::sync_with_stdio(0);
	cin>>n;
	string opt;
	int u,v;
	while(n--){
		cin>>opt>>u;
		if(opt=="back"){
			if(!d[u].empty())
				cout<<d[u].back()<<'\n';
		}
		else if(opt=="front"){
			if(!d[u].empty())
				cout<<d[u].back()<<'\n';
		}
		else if(opt=="pop_back")
			d[u].pop_back();
		else if(opt=="pop_front")
			d[u].pop_front();
		else if(opt=="push_back"){
			cin>>v;
			d[u].push_back(v);
		}
		else if(opt=="push_front"){
			cin>>v;
			d[u].push_front(v);
		}
		else if(opt=="size")
			cout<<d[u].size()<<'\n';
	}
	return 0;
}
2023/9/7 19:52
加载中...