列车调度(vector)
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n,m;
set a;
scanf(“%d”,&n);
for(int i=0;i<n;i++)
{
cin>>m;
if(a.upper_bound(m)!=a.end())
a.erase(a.upper_bound(m));
a.insert(m);
}
cout<<a.size();
return 0;
}
lower_bound和upper_bound为二分法查找元素,其时间复杂度为O(log n)。
lower_bound函数返回数组 nums 中大于等于 val 的第一个元素的地址,若 nums 中的元素均小于 val 则返回尾后地址。
upper_bound函数返回数组 nums 中大于 val 的第一个元素的地址,若 nums 中的元素均小于等于 val 则返回尾后地址。
用法和数组中的用法基本一样,不同之处在于写法和返回值,STL返回值为迭代器,写法如下: