P5854笛卡尔树模板求助玄关
  • 板块灌水区
  • 楼主ChenZQ
  • 当前回复3
  • 已保存回复3
  • 发布时间2024/9/15 19:25
  • 上次更新2024/9/15 21:55:16
查看原帖
P5854笛卡尔树模板求助玄关
745358
ChenZQ楼主2024/9/15 19:25
#include <bits/stdc++.h>
using namespace std;

int l[10000007],r[10000007];
int n;
int a[10000007];
int stk[10000007],top=0;
int main()
{
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&a[i]);
		int k=top;
		while(k>0 && a[stk[k]]>a[i]) k--;
		if(k) r[stk[k]]=i;
		if(k<top) l[i]=stk[k+1];
		stk[++k]=i;
		top=k;
	}
	long long ll=0,rr=0;
	for(int i=1;i<=n;i++) ll^=1LL*(i*(l[i]+1)),rr^=1LL*(i*(r[i]+1));
	printf("%lld %lld",ll,rr);

}
2024/9/15 19:25
加载中...