题目链接
解题思路:
能走就走 不能走就得把它放到平行的轨道上
所以 一个不能走的车 放轨道时 要选择 有比这个车的编号大的车的轨道放车 如果所有的轨道上的车的编号都比这个车的编号小
那就开个新轨道
简而言之 只需要记录每个轨道中最小的编号
然后当前编号去与每个轨道的最小编号比较 如果没有大于它的 那就开个新轨道 如果有 那当前编号就变成了那个轨道中的最小编号
说到这 就回想到 set 我们可以用 set 去存放每个轨道的最小编号
代码如下:
#include<iostream>
#include<set>
using namespace std;
set<int> s;//存每个轨道中编号最小的车的编号
int main()
{
int n;
int x;
cin>>n;
while(n--)
{
cin>>x;
set<int>::iterator it=s.lower_bound(x);//找到大于等于x的第一个数
if(it!=s.end())// 所有轨道中最下的编号有大于x的
{
s.erase(it);//把那个删掉
s.insert(x);//把x加进来
}
else//比所有轨道上的最小编号都大
s.insert(x);//再加一个轨道 即加入set
}
cout<<s.size()<<endl;
return 0;
}