80分求救
查看原帖
80分求救
1412732
litangzheng楼主2024/9/30 18:27

测试点7和8超时

//链表
#include<bits/stdc++.h>
using namespace std;
int n;//总数 
int tou=1;//链表开始指针 
int cnt=1;//下标 
int ans;
struct FRI{
	int head,pre,nxt,lx;
	//头指针 ,前一个与后一个,类型。 
}fri[200005];
bool z[200005];
int main(){
	scanf("%d",&n);
	z[n+1]=1;
	int shang=0;
	fri[1].head=1;//初始化 
	for(int i=1;i<=n;i++){
		int a;
		scanf("%d",&a);
		if(i==1) shang=a;
		else if(shang!=a){
			fri[cnt].nxt=cnt+1;
			++cnt;
			fri[cnt].pre=cnt-1;
			fri[cnt].head=i;
		}
		shang=a;
		fri[cnt].lx=a;
	}
	while(ans<n){
		int a=tou;
		int shang=0;
		while(fri[a].head!=0){
			if(a!=tou&&fri[a].lx==shang){
				a=fri[a].nxt;
				continue;
			}
			if(z[fri[a].head]==1){
				if(fri[a].pre==0) tou=fri[a].nxt;
				fri[fri[a].pre].nxt=fri[a].nxt;
				fri[fri[a].nxt].pre=fri[a].pre;
				a=fri[a].nxt;
				continue;
			}	
			shang=fri[a].lx;
			printf("%d ",fri[a].head);
			z[fri[a].head]=1;
			fri[a].head+=1;
			a=fri[a].nxt;
			ans++;
		}
		printf("\n");
	}
	return 0;
}

救救我吧,我实在是不知道怎么优化了。

2024/9/30 18:27
加载中...