TLE #8求助
查看原帖
TLE #8求助
719289
Didncan_yu楼主2023/10/18 17:34
#include<bits/stdc++.h>
using namespace std;
inline int read();
inline void write(long long n);
int n,p[200007],cnt;
bool k[200007];
queue<int>a[200007];
list<int>li;
int main(){
	n=read();
	for(int i=1;i<=n;i++){
		scanf("%d",&p[i]);
	}
	for(int i=1;i<=n;i++){
		if(i==1||p[i]!=p[i-1]){
			cnt++;
			k[cnt]=p[i];
			a[cnt].push(i);
			while(p[i]==p[i+1]&&i+1<=n){
				i++;
				a[cnt].push(i);
			}
		}
	}
	for(int i=1;i<=cnt;i++){
		li.push_back(i);
	}
	int it1=0;
	while(it1<n){
		int last,d=0;
		bool have=1;
		list<int>::iterator it2,nw;
		for(it2=li.begin();it2!=li.end();it2++){
			int i=(*it2);
			if((have||k[i]!=last)&&!a[i].empty()){
				last=k[i];
				have=0;
				it1++;
				d++;
				write(a[i].front());
				putchar(' ');
				a[i].pop();
			}
			if(a[i].empty()){
				nw=it2;
				it2++;
				li.erase(nw);
				it2--;
			}
		}
		putchar('\n');
		if(d==1){
			for(it2=li.begin();it2!=li.end();it2++){
				int i=*it2;
				while(!a[i].empty()){
					write(a[i].front());
					putchar('\n');
					a[i].pop();
				}
			}
			break;
		}
	}
	write(li.size());
	return 0;
}
inline int read(){
	int s=0,w=1;
	char ch=getchar();
	while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}
	while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar();
	return s*w;
}
inline void write(long long n){
	if(n<0){putchar('-');n=-n;}
	if(n>9){write(n/10);}
	putchar(n%10+'0');
}
2023/10/18 17:34
加载中...