自制阳寿测试器
  • 板块灌水区
  • 楼主sxq9
  • 当前回复5
  • 已保存回复5
  • 发布时间2025/1/25 11:04
  • 上次更新2025/1/25 11:23:59
查看原帖
自制阳寿测试器
658762
sxq9楼主2025/1/25 11:04

rt,将这份代码交到笛卡尔树这一题,有一半概率90分,一半概率AC。

#include<bits/stdc++.h>
using namespace std;

const int N = 1e7 + 10;
int n;
int w[N];
int stk[N], ls[N], rs[N];

void build()
{
	int top = 0, pos = 0;
	for(int i = 1; i <= n; i ++)
	{
		pos = top;
		while(pos > 0 && w[stk[pos]] > w[i]) pos --;
		if(pos > 0) rs[stk[pos]] = i;
		if(pos < top) ls[i] = stk[pos + 1];
		stk[++ pos] = i;
		top = pos;
	}
} 
int main()
{
	scanf("%d", &n);
	for(int i = 1; i <= n; i ++) scanf("%d", &w[i]);
	build();
	long long ans1 = 0, ans2 = 0;
	for(int i = 1; i <= n; i ++)
	{
		ans1 ^= 1ll * i * (ls[i] + 1);
		ans2 ^= 1ll * i * (rs[i] + 1);
	}
	printf("%lld %lld\n", ans1, ans2);
	
	return 0;
}
2025/1/25 11:04
加载中...