各位大佬帮忙调一下,70分TLE
查看原帖
各位大佬帮忙调一下,70分TLE
761210
dpdfs12345楼主2023/8/5 13:40
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
const int N = 2e5 + 10;
int n;
int a[N];
struct node{
	int color;
	vector<int> member;
};
vector<node> v;
void init(){
	a[n+1] = 0x3f3f3f3f;
	for(int i=1;i<=n;i++){
		vector<int> t;
		for(int j=i;j<=n+1;j++){
			if(a[i] != a[j]){
				node temp;
				temp.color = a[i],temp.member = t;
				v.push_back(temp);
				i = j - 1;
				break;
			}
			else t.push_back(j);
		}
	}
}
int main(){
	scanf("%d",&n);
	for(int i=1;i<=n;i++) scanf("%d",&a[i]);
	init();
	while(v.size()){
		for(int i=0;i<v.size();i++){
			printf("%d ",v[i].member[0]);
			reverse(v[i].member.begin(),v[i].member.end());
			v[i].member.pop_back();
			reverse(v[i].member.begin(),v[i].member.end());
		}
		puts("");
		vector<node> t;
		for(int i=0;i<v.size();i++){
			if(v[i].member.size() > 0) t.push_back(v[i]);
		}
		vector<node> t2;
		for(int i=0;i<t.size();i++){
			if(t2.size() == 0){
				t2.push_back(t[i]);
				continue;
			}
			if(t2.back().color == t[i].color){
				node temp;
				temp.color = t[i].color;
				for(auto b:t2.back().member) temp.member.push_back(b);
				for(auto b:t[i].member) temp.member.push_back(b);
				t2.pop_back();
				t2.push_back(temp);
			}
			else t2.push_back(t[i]);
		}
		v = t2;
	}
	return 0;
}
2023/8/5 13:40
加载中...