Skip to content

Commit 5557ef5

Browse files
authored
最长上升子序列(n·log(n))
1 parent 70aea5f commit 5557ef5

File tree

1 file changed

+47
-0
lines changed

1 file changed

+47
-0
lines changed
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
#include <cstdio>
2+
3+
using namespace std;
4+
5+
int n, d[1000010], least[1000010], longest;
6+
7+
int binary_search(int x)
8+
{
9+
int l = 0, r = longest - 1;
10+
do
11+
{
12+
int mid = (l + r) >> 1;
13+
if (least[mid] >= x)
14+
{
15+
r = mid;
16+
}
17+
else
18+
{
19+
l = mid + 1;
20+
}
21+
} while (l < r);
22+
return l;
23+
}
24+
25+
int main()
26+
{
27+
scanf("%d", &n);
28+
for (int i = 0; i < n; i++)
29+
{
30+
scanf("%d", &d[i]);
31+
}
32+
least[longest++] = d[0];
33+
for (int i = 1; i < n; i++)
34+
{
35+
int l = binary_search(d[i]);
36+
if (d[i] > least[l])
37+
{
38+
least[longest++] = d[i];
39+
}
40+
else
41+
{
42+
least[l] = d[i];
43+
}
44+
}
45+
printf("%d", longest);
46+
return 0;
47+
}

0 commit comments

Comments
 (0)