社区讨论
其中,自己写的二分查找,查找不上升子串的长度总是比答案少
P1020[NOIP 1999 提高组] 导弹拦截参与者 1已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @lodcw3nk
- 此快照首次捕获于
- 2023/10/31 04:32 2 年前
- 此快照最后确认于
- 2023/11/06 19:53 2 年前
代码:
Cwhile(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];
}
}
完整代码:
Cint 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;
}
回复
共 1 条回复,欢迎继续交流。
正在加载回复...