L2-014 Despacho de tren (25 minutos)
análisis:
Al principio, se usó un bucle para encontrar la posición de inserción, el tiempo fue O (n * n) y el resultado fue el tiempo de espera, por lo que se usó la función upper_bound (lower_bound) en su lugar, y se usó la dicotomía para buscar rápidamente. Además, al almacenar el valor mínimo de cada pista en orden ascendente, el código también se puede simplificar.
Código:
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n, ma[100010], ans = 0;
cin >> n;
while(n--){
int a;
cin >> a;
//从1开始储存,而非0,可以更加简化,但要注意下面的函数中地址也要从1开始
if (a>ma[ans]) ma[++ans]=a;
else *upper_bound(ma+1,ma+ans+1,a)=a;
}
cout << ans;
return 0;
}