代码:
while(redn(highs[++n])); n--;
int len1=1,len2=1;
array1[1] = highs[1];array2[1] = highs[1]
for(int i=2;i<=n;i++){
if(array1[len1]>=highs[i]) array1[++len1] = highs[i];
else{
int l = 1, r= len1;
while(l<r){
int mid = l+(r-l)/2;
if(array1[mid]>highs[i]) l = mid+1;
else r = mid;
}
array1[l] = highs[i];
}
}
完整代码:
int solve4(){
while(redn(highs[++n])); n--;
int len1=1,len2=1;
array1[1] = highs[1];array2[1] = highs[1];
for(int i=2;i<=n;i++){
if(array1[len1]>=highs[i]) array1[++len1] = highs[i];
else{
int l = 1, r= len1;
while(l<r){
int mid = l+(r-l)/2;
if(array1[mid]>highs[i]) l = mid+1;
else r = mid;
}
array1[l] = highs[i];
}
if(array2[len2]<highs[i]) array2[++len2] = highs[i];
else{
int l=1,r=len2;
while(l<r){
int mid = l+(r-l)/2;
if(array2[mid]<highs[i]) l = mid+1;
else r = mid;
}
array2[l] = highs[i];
}
}
cout<<len1<<endl<<len2;
return 0;
}