本人蒟蒻60分tle求神犇调一调
查看原帖
本人蒟蒻60分tle求神犇调一调
1412841
BaiBaiShaFeng楼主2024/9/28 16:50
#include <bits/stdc++.h>
using namespace std;

const int MN=200010;
int head = 0, tail = 200005;
int nx[MN]={200005}, pr[MN]={0};
int value[MN]={2};
int block[MN]={0};

void del(int x){
	nx[pr[x]]=nx[x];
	pr[nx[x]]=pr[x];
}

void cha(){
	bool beichale=false;//是否为下一个块ppt 
	int ppt=head;//ppt是查到哪里了 
	int num = 0;//num是block的有效元素数 
	while (nx[ppt]!=tail){//全都遍历
		if (value[ppt]!=value[nx[ppt]]) {
			block[num]=nx[ppt];
			num++;
		}
		ppt = nx[ppt];
	} 
	for(int i=0; i<num; i++){
		if(block[i]!=0){
			cout<<block[i]<<" ";
			del(block[i]);
		}
	}
	int block[MN]={0};
}

void ad(int x, int k){
	int sav = nx[k];
	pr[sav]=x;
	nx[k] = x;
	nx[x]=sav;
	pr[x]=  k;  
}

void prin(){
	int i=head;
	i=nx[i];
	while(i!=tail){
		cout<<value[i]<<" ";
		i=nx[i];
	}
	cout<<endl;
}
	
int main(){
	int n;
	cin>>n;
	nx[head]=tail;
	pr[tail]=head;	
	ad(1, head);
	cin>>value[1];
	for (int i=2; i<=n; i++){
		ad(i, i-1);
		cin>>value[i];
	}
	while(1<2){
		if(nx[head]==tail){
			break;
		}
		cha();
		cout<<endl;
	}
}

我太菜了

2024/9/28 16:50
加载中...