P1160队列安排 时间复杂度
  • 板块题目总版
  • 楼主KMSK
  • 当前回复1
  • 已保存回复1
  • 发布时间2022/2/23 01:54
  • 上次更新2023/10/28 07:55:15
查看原帖
P1160队列安排 时间复杂度
472423
KMSK楼主2022/2/23 01:54

时间复杂度O(Max(n,m))但还是TLE3个点40分
用的是STL里面的list,代码如下:

#include<iostream>
#include<cstdio>
#include<list>
#define Iter list<int>::iterator
using namespace std;
int n;
list<int>mlist;
Iter pos[100005];//存储各个数的迭代器 
Iter it;
int k,p; 
int m;
int t;
int main()
{
	cin>>n;
    mlist.push_front(1);
    pos[1]=mlist.begin();
    for(int i=2;i<=n;i++)
    {
    	cin>>k>>p;
    	if(p==0)
    	{
    		it=pos[k];
			pos[i]=mlist.insert(it,i);//会返回新的迭代器 
    		
		}
		else if(p==1)//在右边插入 
		{
			it=pos[k];
			it++;
			pos[i]=mlist.insert(it,i);
		}
	}
	cin>>m;
	for(int i=1;i<=m;i++)
	{
		cin>>t;
		mlist.remove(t);
	 } 
	 Iter nit=mlist.end();
	 nit--;
	 for(Iter i=mlist.begin();i!=nit;i++)
	 {
	 	if(i==mlist.end())break;
	 	cout<<*i<<" ";
	 }
	 cout<<*nit<<endl;
	return 0;
}  
2022/2/23 01:54
加载中...