很离谱的一件事情,一开始用n方算法写的,用了46ms
int cmp(node a,node b){
if(a.x==b.x)return a.y>b.y;
return a.x>b.x;
}
int main(){
cin>>n;
for(int i=1;i<=n;i++)cin>>a[i].x>>a[i].y;
sort(a+1,a+1+n,cmp);
for(int i=1;i<=n;i++){
if(h[ans]<a[i].y)h[++ans]=a[i].y;
else{
int pos=0,minn=1e8;
for(int j=1;j<=ans;j++){
if(h[j]>=a[i].y&&minn>h[j]){
minn=h[j];pos=j;
}
}
h[pos]=a[i].y;
}
}
cout<<ans<<endl;
}
后来优化到了nlogn,把第二层for循环用lower_bound替代,结果花了47ms,求助各位大佬这是怎么回事
for(int i=1;i<=n;i++){
if(h[ans]<a[i].y)h[++ans]=a[i].y;
else{
int pos=lower_bound(h+1,h+ans,a[i].y)-h;
h[pos]=a[i].y;
}
}