笛卡尔树
笛卡尔树实际上就是对于多个二元组
在构建时,对于右链上的元素,自底向上一定是
所以我们按
假设我们轮到第
使用栈模拟即可。
代码:
#include<bits/stdc++.h> #define int long long using namespace std; const int N=1e7+10; int n; int st[N],top; int p[N],ls[N],rs[N]; inline int read(){ int x=0; char c='&'; while(!isdigit(c))c=getchar(); while(isdigit(c)){ x=x*10+c-'0'; c=getchar(); } return x; } signed main(){ std::ios::sync_with_stdio(false); cin.tie(0);cout.tie(0); n=read(); // cout<<n<<endl; for(int i=1;i<=n;i++)p[i]=read(); for(int i=1;i<=n;i++){ int k=top; while(k>0&&p[st[k]]>p[i])k--; if(k)rs[st[k]]=i; if(k<top)ls[i]=st[k+1]; top=k; st[++top]=i; } int ans1=0,ans2=0; for(int i=1;i<=n;i++){ ans1=ans1^(i*(ls[i]+1)); ans2=ans2^(i*(rs[i]+1)); } cout<<ans1<<" "<<ans2; return 0; }
本文作者:Little_corn
本文链接:https://www.cnblogs.com/little-corn/p/18157428
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步