70marks,求优化
查看原帖
70marks,求优化
1015796
Lingyu_fly楼主2024/5/28 13:25
#include<iostream>
#include<cmath>
#include<cstdio>
#include<algorithm>
#include<vector>
#include<queue>
#include<cstring>
using namespace std;
const int N=2e5+10;
int n;
struct node{
	int num,vis;
}a[N],b[N];
int main(){
	scanf("%d",&n);
	for(int i=1;i<=n;i++){
		scanf("%d",&a[i].num);
		a[i].vis=i;
	}a[0].num=(a[1].num+1)%2;a[n+1].num=(a[n].num+1)%2;
	while(1){
		int top=0;
		for(int i=1;i<=n;i++){
			if(a[i].num!=a[i-1].num){
				printf("%d ",a[i].vis);
			}else{
				b[++top].num=a[i].num;
				b[top].vis=a[i].vis;
			}
		}
		if(top==0) break;
		for(int i=1;i<=top;i++){
			a[i].num=b[i].num;
			a[i].vis=b[i].vis;
		}a[0].num=(a[1].num+1)%2;a[top+1].num=(a[top].num+1)%2;
		printf("\n");n=top;
	}
	return 0;
}

最后三个点TLE,有 n2n^2 或 nlognnlogn 的做法吗?

求助 orz

2024/5/28 13:25
加载中...