80分求助
查看原帖
80分求助
571348
PartiallyCorrect楼主2023/9/2 11:18
#include<bits/stdc++.h>
using namespace std;
const int N=2e5+5;
int a[N],n,tot,L=1,R,head=1;
vector<vector<int> > ans;
struct node {
	int l,r,tag,pre,nxt;
}; node l[N];
void Insert(int i) {
	++tot; l[tot]=node{L,R,a[L],tot-1,tot+1}; L=R=i;
}
void Delete(int i) {
	if(i==head) head=l[i].nxt;
	l[l[i].pre].nxt=l[i].nxt;
	l[l[i].nxt].pre=l[i].pre;
}
int main() {
	//freopen("fruit.in","r",stdin);
	//freopen("fruit.out","w",stdout);
	scanf("%d",&n);
	for(int i=1;i<=n;i++) {
		scanf("%d",&a[i]);
		if(a[L]==a[i])
			R=i;
		else
			Insert(i);
	}
	Insert(n);
	l[tot].nxt=0;
	bool flag=true;
	while(flag) {
		flag=false; vector<int> v;
		int p=l[head].tag;
		for(int i=head;i;i=l[i].nxt) {
			if(l[i].tag!=p) continue; flag=true;
			v.push_back(l[i].l); l[i].l++; p^=1;
			if(l[i].l>l[i].r)
				Delete(i);
		}
		ans.push_back(v);
	}
	for(int i=0;i<ans.size();i++) {
		for(int j=0;j<ans[i].size();j++) {
			printf("%d",ans[i][j]);
			if(j!=ans[i].size()-1)
				putchar(' ');
		}
		if(i!=ans.size()-1) 
			putchar('\n');
	}
	return 0;
}

TLE #8 #9

2023/9/2 11:18
加载中...