请教大神,两点超时!!
查看原帖
请教大神,两点超时!!
478755
Karis楼主2021/11/2 21:11

我感觉每个水果只会被删一次啊,为什么第8,9点还是超时了??(;′⌒`)

求大神帮忙优化,谢谢了

#include<bits/stdc++.h>

using namespace std;

int n, l[200010], a[200010], cnt, tot, ans[200010], len[200010], fl[200010];

bool book[200010];

int main()
{
	//scanf("%d", n);
	//freopen("fruit.in","r",stdin);freopen("fruit.out","w",stdout);
	cin >> n ;
	int last = -1, sum = 0;
	for(int i = 1; i <= n; ++i)
	{
		//scanf("%d", a[i]);
		cin >> a[i];
		if(a[i] != last)
		{
			cnt++;
			l[cnt] = fl[cnt] = i, last = a[i], len[cnt-1] = sum, sum = 1;
		}
			
		else
			sum++;
	}
	len[cnt] = sum;
	int num = 0;
	while(num < n)
	{
		last = -1;
		tot = 0;
		for(int i = 1; i <= cnt; ++i)
			if(!book[i])
			{
				if(a[l[i]] != last)
				{
					last = a[l[i]];
					ans[++tot] = l[i];
					num++;
					if(l[i] + 1 - fl[i] < len[i])
						l[i]++;
					else
						book[i] = 1;
				}
				else
					continue;
			}
		for(int i = 1; i <= tot; ++i)
			printf("%d ", ans[i]);
		printf("\n");
	}
	return 0;
}
2021/11/2 21:11
加载中...