社区讨论
30分求调
P5854【模板】笛卡尔树参与者 1已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @mhjdccg4
- 此快照首次捕获于
- 2025/11/04 00:42 4 个月前
- 此快照最后确认于
- 2025/11/04 00:42 4 个月前
CPP
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 10100000;
int a[N], l[N], r[N];
int n;
void build() {
stack<int> st;
for (int i = 1; i <= n; i++) {
l[i] = r[i] = 0;
}
for (int i = 1; i <= n; i++) {
int last = 0;
while (!st.empty() && a[st.top()] > a[i]) {
last = st.top();
st.pop();
}
if (!st.empty()) r[st.top()] = i;
l[i] = last;
st.push(i);
}
}
int main() {
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
scanf("%d", &a[i]);
}
build();
ll ans = 0;
for (int i = 1; i <= n; i++) ans ^= 1LL * i * (l[i] + 1);
printf("%d ", ans);
ans = 0;
for (int i = 1; i <= n; i++) ans ^= 1LL * i * (r[i] + 1);
printf("%d ", ans);
}
回复
共 1 条回复,欢迎继续交流。
正在加载回复...