社区讨论
自制阳寿测试器
灌水区参与者 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 条回复,欢迎继续交流。
正在加载回复...