2,4 点WA了,麻烦大佬看看
  • 板块P1160 队列安排
  • 楼主代磊
  • 当前回复1
  • 已保存回复1
  • 发布时间2021/7/9 08:30
  • 上次更新2023/11/4 18:21:37
查看原帖
2,4 点WA了,麻烦大佬看看
457499
代磊楼主2021/7/9 08:30
#include<bits/stdc++.h>
using namespace std;
const int N=100010;
int e[N],l[N],r[N],idx;
int b[N]={0};
//! 初始化
void into()
{
    l[1] = 0, r[0] = 1;//* 初始化 第一个点的右边是 1   第二个点的左边是 0
    idx = 2;//! idx 此时已经用掉两个点了
}
//在第 K 个点右边插入一个 X 
void add(int k, int x)
{
    e[idx] = x;
    l[idx] = k;
    r[idx] = r[k]; //这里的 k 先不加 1 , 输入的时候 k+1 就好
    l[r[k]] = idx;
    r[k] = idx;
    idx++;
}//当然在 K 的左边插入一个数 可以再写一个 , 也可以直接调用我们这个函数,在 k 的左边插入一个 数 等价于在 l[k] 的右边插入一个数 add(l[k],x)
void move(int k)
{
    r[l[k]] = r[k];
    l[r[k]] = l[k];
}
int main(){
	int n;
	cin>>n;
	n-=1;
	into();
	add(l[1],1);
	b[0]=1;
	int t=2;
	memset(b,0,sizeof b);
	while(n--){
		int k,p;
		cin>>k>>p;
		if(p==1){
			add(k+1,t);
		}
		else
			add(l[k+1],t);
		b[t++]=1;
	} 
	int m;
	cin>>m;
	while(m--){
		int y;
		cin>>y;
		if(b[y]==0) continue;
		move(y+1);
		b[y]--;
	}
	int sum=0;
	for(int i=r[0];i!=1;i=r[i]){
		sum++;
	}
	for(int i=r[0];i!=1;i=r[i]) {
		cout<<e[i];
		if(sum!=1){
			cout<<" ";
		}
		sum--;
	}
	cout<<endl;
	return 0;
}
2021/7/9 08:30
加载中...