社区讨论

神秘问题求助

P5854【模板】笛卡尔树参与者 5已保存回复 5

讨论操作

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

当前回复
5 条
当前快照
1 份
快照标识符
@mhjhsp3n
此快照首次捕获于
2025/11/04 02:47
4 个月前
此快照最后确认于
2025/11/04 02:47
4 个月前
查看原帖
CPP
#include<bits/stdc++.h>
#define LL long long
using namespace std;
const int N=1e7+10;
int s[N],z[N],top,t[N][2];
int main(){
	// ios::sync_with_stdio(0);
	// cin.tie(0); cout.tie(0);
	
	int n;cin>>n;
	for(int i=1;i<=n;i++)cin>>s[i];
	for(int i=1;i<=n;i++){
		int last=0;
		while(top&&s[z[top]]>s[i]){last=z[top];top--;}
		if(top!=0)t[z[top]][1]=i;
		if(last!=0)t[i][0]=last;
		z[++top]=i;
	}
	LL L=0,R=0;
	for(int i=1;i<=n;i++){
		L=(L^(1ll*i*(t[i][0]+1)));
		R=(R^(1ll*i*(t[i][1]+1)));
	}
	cout<<L<<" "<<R;
	return 0;
}
上述代码本地正确,洛谷错误。
代码中的t的第二维开到 3 可以通过,但并没有发现任何可能数组越界的地方,甚至只把LL改为int也能通过部分。

回复

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

正在加载回复...