用upper_bound()直接代替二分的错误在哪里?大佬能否解答一下。
例如:P1439
#include<bits/stdc++.h>
using namespace std;
int n,c[10000001],d[10000001];
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
int x;
scanf("%d",&x);
c[x]=i;
}
int ans=0;
for(int i=1;i<=n;i++)
{
int x;
scanf("%d",&x);
if(c[x]>d[ans])
{
ans++;
d[ans]=c[x];
}
else
{
d[upper_bound(d+1,d+1+ans,x)-d]=c[x];
}
}
printf("%d",ans);
return 0;
}
使用d[upper_bound(d+1,d+1+ans,x)-d]=c[x];有错误, 但用二分替代后就对了
int l=1,r=ans;
while(l<r)
{
int mid=(l+r)/2;
if(d[mid]>c[x])r=mid;
else l=mid+1;
}
d[l]=c[x];