解题思路:
注意事项:
参考代码:
#include<iostream> #include<algorithm> using namespace std; int a[1001],n; int b[1001]={0},k=0; int main() { cin>>n; for(int i=1;i<=n;i++) cin>>a[i]; for(int i=1;i<=n;i++) { if(a[i]>b[k-1]) {//如果a[i]大于b数组中的最后一个数 b[k]=a[i]且b数组长度+1 b[k++]=a[i]; } else { int r=upper_bound(b,b+k,a[i])-b;//二分查找在b中第一个大于a[i]的位置 b[r]=a[i]; } } cout<<k<<endl; return 0; }
0.0分
1 人评分
C语言程序设计教程(第三版)课后习题8.3 (C语言代码)浏览:621 |
C语言程序设计教程(第三版)课后习题7.5 (C语言代码)浏览:542 |
程序员的表白 (C语言代码)浏览:1328 |
C二级辅导-计负均正 (C语言代码)浏览:657 |
C语言训练-排序问题<1> (C++代码)浏览:598 |
九宫重排 (C++代码)浏览:1334 |
C语言程序设计教程(第三版)课后习题8.9 (Java代码)浏览:1334 |
C语言程序设计教程(第三版)课后习题8.3 (C语言代码)浏览:421 |
【亲和数】 (C语言代码)浏览:495 |
C语言程序设计教程(第三版)课后习题10.5 (C语言代码)浏览:552 |