萌新刚学笛卡尔树求救
查看原帖
萌新刚学笛卡尔树求救
248400
Inaba_Meguru楼主2021/10/1 18:02

暂未发现hack.

#include<iostream>
using namespace std;
const int MAXN=1e7+5;
#define ll long long
int n;
int p[MAXN];
ll ls[MAXN],rs[MAXN];
int st[MAXN];
int top=0;
inline int read(){
	char c=getchar();int r=0;
	while(c>'9'||c<'0') c=getchar();
	while(c>='0'&&c<='9') r=10*r+c-'0',c=getchar();
	return r;
}
int main(){
	n=read();
	for(int i=1;i<=n;i++)
		p[i]=read();
	for(int i=1;i<=n;i++){
		while(top&&p[st[top]]>p[i])
			ls[i]=st[top--];
		rs[st[top]]=i;
		st[++top]=i;
	}
	//for(int i=1;i<=n;i++)
	//	cout<<ls[i]<<" "<<rs[i]<<endl;
	ll ans1=0,ans2=0;
	for(ll i=1;i<=n;i++)
		ans1^=i*(ls[i]+1),ans2^=i*(rs[i]+1);
	cout<<ans1<<" "<<ans2;
	return 0;
}
2021/10/1 18:02
加载中...