通过7组,最后三组超时,有知道为什么的吗?
查看原帖
通过7组,最后三组超时,有知道为什么的吗?
133339
quietleaf楼主2021/10/24 18:27
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>
#include <cmath>
using namespace std;
const int N = 2e5 + 5;
int n, a[N], num;
int pre[N], nxt[N]; 
inline int solve() {
	int ans = 0;
	int head = 2;
	
	for(int i = nxt[0] ; i ; i = nxt[i]) //条件i,编号 
	{
		if(a[i] == head) continue; //一个块内的不输出 
		printf("%d ", i);
		ans ++;
		head = a[i];
		nxt[ pre[i] ] = nxt[i];
		pre[ nxt[i] ] = pre[i];
		//int L = pre[i], R = nxt[i];
		//nxt[L] = R, pre[R] = L;   //每次找到头输出,删除头。
	}
	printf("\n");
	return ans; 
}
int main()
{
   //freopen("fruit.in", "r", stdin);
   //freopen("fruit.out", "w", stdout);
   int i;
   cin >> n;
   a[0] = -1;
   for(i = 1 ; i <= n ; i ++) {
   	    scanf("%d", &a[i]);
   		pre[i] = i - 1;
   		nxt[i] = i + 1;   //双向链表保存位置
   }
   nxt[0] = 1;
   nxt[n] = 0;
   
   while(num < n) num += solve();
   return 0;
}
2021/10/24 18:27
加载中...