L2-014 列车调度

法一:(23分)
数组。有一个测试点会超时,每次第二层遍历是O(n)。

#include <bits/stdc++.h>
using namespace std;
int a[100010];
int main(){
	int n,t,count=0;
	cin>>n;
	for(int i=0;i<n;i++){
		cin>>t;
		bool flag=false;
		for(int i=0;i<count;i++){
			if(a[i]>t){
				a[i]=t;
				flag=true;
				break;
			}
		}
        if(!flag){
        	a[count]=t;
        	count++;
		}
	} 
	cout<<count<<endl;
	return 0;
}

法二:(25分)stl相当于是遍历上节省了时间,lower_bound底层二分

#include <bits/stdc++.h>
using namespace std;
int main(){
	int n,t,count=0;
	cin>>n;
	set<int> st;
	set<int>::iterator it;
	for(int i=0;i<n;i++){
		cin>>t;
		if(st.empty()){
			st.insert(t);
		}else{
			it=st.lower_bound(t);
			if(it!=st.end()){
				st.erase(it);
				st.insert(t);
			}else{
				st.insert(t);
			}
		}
	}
	cout<<st.size()<<endl;
	return 0;
}
posted @ 2024-03-15 20:40  YuKiCheng  阅读(20)  评论(0编辑  收藏  举报