社区讨论

此种方法建笛卡尔树会TLE?(玄关)

CF1748E Yet Another Array Counting Problem参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@lu6n4tw0
此快照首次捕获于
2024/03/25 15:42
2 年前
此快照最后确认于
2024/03/25 15:49
2 年前
查看原帖
一开始我的写法是:
CPP
for(int i=1;i<=n;i++) {
	while(top && p[stk[top]]<p[i]) top--;
	if(!top) ls[i]=stk[top+1];
	else ls[i]=rs[stk[top]],rs[stk[top]]=i;
	stk[++top]=i;
}
这会TLE。 改成第二篇的写法:
CPP
for (int i = 1; i <= n; i++) {
   int top = cnt;
   while (top && p[s[top]] < p[i]) --top;
   if (top) rc[s[top]] = i;
   if (top < cnt) lc[i] = s[top + 1];
   s[cnt = ++top] = i;
}
就不会有问题。
请问TLE的原因是死循环还是刻意去卡。
附上#2的部分样例:
Input:
LATEX
1000
2 4
1 1
2 4
1 2
3 4
1 1 1
3 4
1 1 2
3 4
1 2 1
3 4
1 2 3
3 4
2 1 2
4 4
1 1 1 1
4 4
1 1 1 2
4 4
1 1 2 1
4 4
1 1 2 3
4 4
1 2 1 1
4 4
1 2 1 2
4 4
1 2 1 3
4 4
1 2 3 1
4 4
1 2 3 4
4 4
2 1 1 2
4 4
2 1 2 1
4 4
2 1 2 3
4 4
2 2 1 2
4 4
3 1 2 3
5 4
1 1 1 1 1
5 4
1 1 1 1 2
5 4
1 1 1 2 1
5 4
1 1 1 2 3
5 4
1 1 2 1 1
5 4
1 1 2 1 2
5 4
1 1 2 1 3
5 4
1 1 2 3 1
5 4
1 1 2 3 4
5 4
1 2 1 1 1
5 4
1 2 1 1 2
5 4
1 2 1 1 3
5 4
1 2 1 2 1
5 4
1 2 1 2 3
5 4
Output:
LATEX
10
6
20
10
20
4
10
35
15
35
5
45
25
10
15
1
15
30
5
15
5
56
21
54
6
81
46
13
19
1
84
39
18
78
8
38
2
39
36
21
3
4
14
21
48
6
63
33
12
19
1
21
42
6
21
6
12
18
1
6
6
1
84
28
77
7
127
73
16
23
1
154
73
24
146
11
50
2
73
46
27
3
4
27
140
56
28
129
10
69
3
168
90
20
31
1
92
54
6
8
56
112
10
56
70
34
6
68
13
3
12
34
10
6
17
34
51
2
17
17
3
28
70
7
105
57
15
23
1
112
49
21
98
9
46
...

回复

0 条回复,欢迎继续交流。

正在加载回复...