This commit is contained in:
Zengtudor 2024-10-24 13:59:42 +08:00
parent 2d3a3ce03b
commit 3eff188a70
2 changed files with 56 additions and 0 deletions

Binary file not shown.

56
src/P5854/P5854.cpp Normal file
View File

@ -0,0 +1,56 @@
#include <iostream>
#include <istream>
#include <ostream>
#include <stack>
#ifdef ONLINE_JUDGE
#define DEBUG(code)
#else
#define DEBUG(code)code
#endif
using ll = long long;
const ll max_n = 1e7+5;
struct Node{
ll left_child, right_child, val;
friend std::ostream& operator<<(std::ostream &os, const Node &n){
os<<"Node { val: "<<n.val<<", left_child: "<<n.left_child<<", right_child: "<<n.right_child<<" }";
return os;
}
}nodes[max_n];
ll n;
std::stack<ll> stk;
ll root, ans1, ans2;
int main(){
std::iostream::sync_with_stdio(false), std::cin.tie(nullptr), std::cout.tie(nullptr);
std::cin>>n;
for(ll i{1};i<=n;i++){
std::cin>>nodes[i].val;
}
for(ll i{1};i<=n;i++){
while(!stk.empty() && nodes[i].val < nodes[stk.top()].val){
nodes[i].left_child = stk.top();
stk.pop();
}
if(!stk.empty()){
nodes[stk.top()].right_child = i;
}else{
root = i;
}
stk.push(i);
}
DEBUG(
std::cout<<root<<'\n';
)
for(ll i{1};i<=n;i++){
DEBUG(
std::cout<<nodes[i]<<'\n';
)
ans1 ^= i * (nodes[i].left_child + 1);
ans2 ^= i * (nodes[i].right_child + 1);
}
std::cout<<ans1<<' '<<ans2<<'\n';
}