这是p1439
修改前代码 RE3个点
#include<bits/stdc++.h>
using namespace std;
int a[100005],b[100005],c[100005],d[100005],len,n;
int main()
{
cin>>n;
for(register int i=1;i<=n;++i){scanf("%d",&a[i]);c[a[i]]=i;}
for(register int i=1;i<=n;++i){scanf("%d",&b[i]);b[i]=c[b[i]];}
d[1]=b[1];len=1;
for(register int i=2;i<=n;++i)
{
if(b[i]>d[len])d[++len]=b[i];
else *upper_bound(d+1,d+len+1,b[i])=b[i];
}
cout<<len<<endl;
return 0;
}
修改后代码 AC
#include<bits/stdc++.h>
using namespace std;
int a[100005],b[100005],c[100005],d[100005],len,n;
int main()
{
cin>>n;
for(register int i=1;i<=n;++i){scanf("%d",&a[i]);c[a[i]]=i;}
for(register int i=1;i<=n;++i){scanf("%d",&b[i]);b[i]=c[b[i]];}
d[1]=b[1];len=1;
for(register int i=2;i<=n;++i)
{
if(b[i]>d[len])d[++len]=b[i];
else d[upper_bound(d+1,d+len+1,b[i])-d]=b[i];
}
cout<<len<<endl;
return 0;
}
其中只改了一处
else *upper_bound(d+1,d+len+1,b[i])=b[i];
改为
else d[upper_bound(d+1,d+len+1,b[i])-d]=b[i];
然而我在做p1020导弹拦截的时候 使用上面一种并没有出错
求大佬解惑 二者有什么区别 为什么会RE
感谢