蒟蒻60分求助(链表做法)
查看原帖
蒟蒻60分求助(链表做法)
108852
天涯狂生楼主2021/7/14 21:01
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
#define maxn 100010
#define maxm 310
int head,tail,num[maxn],nex[maxn],grp[maxn],tl[maxm],flag[maxm];
int n,m,t;
void init()
{
	head=-1;tail=-1;
	memset(flag,0,sizeof(flag));
	for(int i=0;i<n;i++)
	{
		int p;
		cin>>p;
		num[i]=i;
		grp[i]=p;
	}
}
void pushh(int data)
{
	if(head==-1)
	{
		head=data;
		tail=data;
		nex[data]=-1;
	}	
	else if(!flag[grp[data]])
	{
		nex[tail]=data;
		tail=data;
		nex[data]=-1;
	}
	else
	{
		int prenode=tl[grp[data]];
		if(nex[prenode]==-1)
			tail=data;
		nex[data]=nex[prenode];
		nex[prenode]=data;
	}
	tl[grp[data]]=data;
	flag[grp[data]]++;
}
void popp()
{
	cout<<head<<endl;
	flag[grp[head]]--;
	head=nex[head];
}
int main()
{
	cin>>n>>m;
	init();
	cin>>t;
	for(int i=1;i<=t;i++)
	{
		char p[10];
		scanf("%s",p);
		if(p[1]=='u')
		{
			int ber;
			cin>>ber;
			pushh(ber);
		}
		else
			popp();
	}
	return 0;
}
2021/7/14 21:01
加载中...