diff --git a/.gitignore b/.gitignore index 05685e9..85625c7 100644 --- a/.gitignore +++ b/.gitignore @@ -3,4 +3,5 @@ !.gitignore !README.md !*.md +!clean.sh tmp.md \ No newline at end of file diff --git a/P1020.cpp b/P1020.cpp new file mode 100644 index 0000000..35888c0 --- /dev/null +++ b/P1020.cpp @@ -0,0 +1,48 @@ +#include +using namespace std; +const int MAXN = 1e5 + 3; +int n, t, a[MAXN], f[MAXN]; +int main() +{ + freopen("test.in", "r", stdin); + while (~scanf("%d", &a[++n])) + ; + --n; + f[0] = INT_MAX; + for (int i = 1; i <= n; ++i) + { + int l = 0, r = t + 1; + while (r - l > 1) + { + int m = l + (r - l) / 2; + if (f[m] >= a[i]) + l = m; + else + r = m; + } + int x = l + 1; + if (x > t) + t = x; + f[x] = a[i]; + } + printf("%d\n", t); + t = 0, memset(f, 0, sizeof(f)), f[0] = 0; + for (int i = 1; i <= n; ++i) + { + int l = 0, r = t + 1; + while (r - l > 1) + { + int m = l + (r - l) / 2; + if (f[m] < a[i]) + l = m; + else + r = m; + } + int x = l + 1; + if (x > t) + t = x; + f[x] = a[i]; + } + printf("%d\n", t); + return 0; +} diff --git a/clean.sh b/clean.sh new file mode 100755 index 0000000..54e592f --- /dev/null +++ b/clean.sh @@ -0,0 +1,2 @@ +find . -maxdepth 1 -type f ! -name "*.*" -executable -delete +rm -rf *.in *.out \ No newline at end of file