Equivalent Prefixes

题意: 求一个最大p使得,在区间[1, p] 内的所有区间 a 序列 和 b序列的最小值下标相同

用单调栈来维护,当第i个元素要进栈时,进行必要出栈操作,使得第i个元素进栈后,该栈单调递增,当a,b两栈的元素个数不相等时,则已达到最大

我的是用数组模拟栈

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
int a[600005],b[600005],a1[600005],b1[600005];
int main()
{
int i,j,m,n,s,w,k,k1,ma;
while(~scanf("%d",&n))
{
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=0;i<n;i++)
scanf("%d",&b[i]);
k=k1=0;
ma=n;
for(i=0;i<n;i++)
{
while(k>0&&a[i]<a1[k-1])
k--;
while(k1>0&&b[i]<b1[k1-1])
k1--;
a1[k++]=a[i];
b1[k1++]=b[i];
if(k!=k1)
{
ma=i;
break;
}
}
printf("%d\n",ma);
}
return 0;
}

猜你喜欢

转载自www.cnblogs.com/zcb123456789/p/11279675.html
今日推荐