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;
}