#include<bits/stdc++.h>
using namespace std;
const int maxn=1e7+10;
inline int read() {
int X = 0, flag = 0;
char ch = 0;
while (!isdigit(ch))
flag |= ch == '-', ch = getchar();
while (isdigit(ch))
X = (X << 3) + (X << 1) + (ch ^ 48), ch = getchar();
return flag ? -X : X;
}
int n,num,z[maxn],cur,top=1,si[maxn],ch[maxn][2];
int main(){
n=read();
for(int i=1;i<=n;++i) si[i]=read();
z[++cur]=1;
for(int i=2;i<=n;++i){
int temp=-1;
while(cur&&si[z[cur]]>si[i]){
cur--;
temp=z[cur];
}
if(!cur){//i变为根
ch[i][0]=z[cur+1];
}
else if(temp==-1){//i变成右儿子
ch[z[cur]][1]=i;
}
else{//temp记录第一个小于i的节点
ch[temp][1]=i;
ch[i][0]=z[cur+1];
}
z[++cur]=i;
}
long long ans1=0,ans2=0;//开long long啊QAQ
for(int i=1;i<=n;++i){
ans1^=(long long)(i*(ch[i][0]+1));
ans2^=(long long)(i*(ch[i][1]+1));
}
cout<<ans1<<' '<<ans2;
return 0;
}
把int全都define成了long long然后a了,可是这题不是只有在计算答案时会溢出么,为什么只有30分呢?