2019 牛客多校 第一场 A、Equivalent Prefixes
https://ac.nowcoder.com/acm/contest/881/A
#include<bits/stdc++.h>
using namespace std;
const int N=5e5+10;
int n,v[N],v2[N],fa[N],fa2[N],ls[N],ls2[N],rs[N],rs2[N];
int s[N],top,top2,ans;
void Tree()
{
for(int i = 1; i <= n; i ++) scanf("%d",&v[i]);
for(int i = 1; i <= n; i ++) scanf("%d",&v2[i]);
top=top2=0;
ans=n;
for(int i = 1; i <= n; i ++)
{
while(top && v[s[top]] > v[i])
ls[i] = s[top], top--;
while(top2 && v2[s[top2]] > v2[i])
ls2[i] = s[top2], top2--;
fa[i] = s[top];
fa[ls[i]] = i;
if(fa[i]) rs[fa[i]] = i;
s[++ top] = i;
fa2[i] = s[top2];
fa2[ls2[i]] = i;
if(fa2[i]) rs2[fa2[i]] = i;
s[++ top2] = i;
if(top!=top2){
ans=i-1;
break;
}
}
}
int main(){
while(~scanf("%d",&n)){
Tree();
printf("%d\n",ans);
}
}
P3246 [HNOI2016]序列
https://www.luogu.org/problem/P3246
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int N=1e5+10;
int n,v[N],fa[N],ls[N],rs[N],pre[N],suf[N];
ll fr[N],fl[N],gr[N],gl[N];
int s[N],top,rt;
ll ans;
void Tree()
{
for(int i = 1; i <= n; i ++) scanf("%d",&v[i]);
top=0;
for(int i = 1; i <