代码如下
#define _CRT_SECURE_NO_WARNINGS #include #include #include #include #include
using namespace std;
const int N = 1001100;
int h[N], f[N] , ff[N]; int n;
int main() {
for (int i = 0;; i++)
{
scanf("%d", &h[i]);
n++;
char c = getchar();
if (c == '\n')
break;
}
int len = 0;
f[0] = 2147483647;
for (int i = 0; i < n; i++)
{
int l = 0, r = len + 1;
while (l + 1 != r)
{
int mid = (l + r) >> 1;
if (f[mid] >= h[i]) l = mid;
else r = mid;
}
len = max(len, l + 1);
f[l + 1] = h[i];
}
printf("%d\n" , len);
int len2 = 0;
ff[0] = -2147483647;
for (int i = 0; i < n; i++)
{
int l = 0, r = len2 + 1;
while (l + 1 != r)
{
int mid = (l + r) >> 1;
if (ff[mid] < h[i]) l = mid;
else r = mid;
}
len2 = max(len2, l + 1);
ff[l + 1] = h[i];
}
cout << len2;
return 0;
}
#define _CRT_SECURE_NO_WARNINGS
#include <cstring>
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <vector>
using namespace std;
const int N = 1001100;
int h[N], f[N] , ff[N];
int n;
int main()
{
for (int i = 0;; i++)
{
scanf("%d", &h[i]);
n++;
char c = getchar();
if (c == '\n')
break;
}
int len = 0;
f[0] = 2147483647;
for (int i = 0; i < n; i++)
{
int l = 0, r = len + 1;
while (l + 1 != r)
{
int mid = (l + r) >> 1;
if (f[mid] >= h[i]) l = mid;
else r = mid;
}
len = max(len, l + 1);
f[l + 1] = h[i];
}
printf("%d\n" , len);
int len2 = 0;
ff[0] = -2147483647;
for (int i = 0; i < n; i++)
{
int l = 0, r = len2 + 1;
while (l + 1 != r)
{
int mid = (l + r) >> 1;
if (ff[mid] < h[i]) l = mid;
else r = mid;
}
len2 = max(len2, l + 1);
ff[l + 1] = h[i];
}
cout << len2;
return 0;
}