L2-014. 列车调度Pat::集合

如何能使轨道数最少?就是每次进入一个数字,看存在的轨道的是有没有比当前值大的,大的话把当前值替换当前轨道即可,如果没有就需新增轨道!

样例:8 4 2 5 3 9 1 6 7

1 2 4 8

3 5

6 9

7

需用4个轨道即可按递减输出了!

所以按以上思路:输入一个值,看当前所有轨道是否有大于前前值的,有的话替换当前轨道值,否则新增轨道

这里需要用set集合实现,否则超时了。。。因为set集合中有一个函数:lower_bound() 可以查出当前集合中有没有比要查的值大的值,有的话直接返回此值,这样我们就可以将此值删除,然后将当前值加入集合,最后的集合长度即为轨道数了!

参考:心向阳光2014博客

代码:

  1. #include <iostream>  
  2. #include <cstdio>  
  3. #include <set>  
  4. #include <algorithm>  
  5. using namespace std;  
  6. set<int>s;  
  7. int main()  
  8. {  
  9.     int n,fig;  
  10.     scanf("%d",&n);  
  11.     for(int i=0;i<n;i++){  
  12.         scanf("%d",&fig);  
  13.         if(s.empty()) s.insert(fig);  
  14.         else{  
  15.             if(s.lower_bound(fig) != s.end()){
  16.                 s.erase(s.lower_bound(fig));
  17.                 s.insert(fig);
  18.             }else s.insert(fig);
  19.         }  
  20.     }  
  21.     printf("%d\n",s.size());  
  22.     return 0;  
  23. }  

posted @ 2018-03-05 21:55  可爱如我  阅读(112)  评论(0编辑  收藏  举报