参考:https://www.liuchuo.net/archives/1967
分析:最终目标将列车按照从大到小的顺序输出,即按照输入顺序从大到小建立序列,至少需要几条序列,即需要几条铁轨
每一次插入都需要自动排序,且需要拿到必查入值大的且差距最小的那个值,所以使用set,s.rbegin()拿到整个集合中最大的元素的迭代器,s.upper_bound() //比他大的范围,在有序的队列中,拿到第一个比他大的元素的迭代器,这里只需要保存每一个队列的最后一个元素就好,每次入队时只和最后一个元素进行比较
#include <iostream> #include <vector> #include <set> using namespace std; int main() { int n, t; cin >> n; set<int> s; s.insert(0); for(int i=0; i<n; i++) { cin >> t; if(t<*s.rbegin()) { s.erase(*s.upper_bound(t)); } s.insert(t); } cout << s.size()-1; return 0; }