我感觉每个水果只会被删一次啊,为什么第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;
}