社区讨论

自制阳寿测试器

灌水区参与者 3已保存回复 5

讨论操作

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

当前回复
5 条
当前快照
1 份
快照标识符
@m6blzfuo
此快照首次捕获于
2025/01/25 11:05
去年
此快照最后确认于
2025/01/25 11:23
去年
查看原帖
rt,将这份代码交到笛卡尔树这一题,有一半概率90分,一半概率AC。
CPP
#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;
}

回复

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

正在加载回复...