$O(n\lg n)$
수열의 각 항에 -1을 곱하고 최장증가수열을 구한다.
#include<cstdio> #include<algorithm> using namespace std; int dp[1000], sz, x, n; int main() { for (scanf("%d", &n); n--;) { scanf("%d", &x); int p = lower_bound(dp, dp + sz, -x) - dp; dp[p] = -x; if (p == sz) sz++; } printf("%d", sz); return 0; }
댓글 없음 :
댓글 쓰기