You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
|
|
#include <bits/stdc++.h>
|
|
|
|
|
using namespace std;
|
|
|
|
|
|
|
|
|
|
const int N = 1e5 + 10;
|
|
|
|
|
typedef long long LL;
|
|
|
|
|
#define lowbit(x) (x & -x)
|
|
|
|
|
|
|
|
|
|
int n, a[N];
|
|
|
|
|
int b[N], bl;
|
|
|
|
|
LL f[N], tr[N];
|
|
|
|
|
|
|
|
|
|
void add(int x, LL c) {
|
|
|
|
|
// 放是往上放
|
|
|
|
|
for (; x <= bl; x += lowbit(x)) tr[x] = max(tr[x], c);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
LL query(int x) {
|
|
|
|
|
// 查是往下查
|
|
|
|
|
LL res = 0;
|
|
|
|
|
for (; x; x -= lowbit(x)) res = max(res, tr[x]);
|
|
|
|
|
return res;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int main() {
|
|
|
|
|
scanf("%d", &n);
|
|
|
|
|
for (int i = 0; i < n; i++) {
|
|
|
|
|
scanf("%d", a + i);
|
|
|
|
|
b[i] = a[i];
|
|
|
|
|
}
|
|
|
|
|
// 离散化
|
|
|
|
|
sort(b, b + n);
|
|
|
|
|
bl = unique(b, b + n) - b; // 此处bl的含义是b.size()
|
|
|
|
|
|
|
|
|
|
for (int i = 0; i < n; i++) {
|
|
|
|
|
int x = lower_bound(b, b + bl, a[i]) - b + 1;
|
|
|
|
|
f[i] = query(x - 1) + a[i];
|
|
|
|
|
add(x, f[i]);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 方法1:
|
|
|
|
|
LL res = 0;
|
|
|
|
|
for (int i = 0; i < n; i++) res = max(res, f[i]);
|
|
|
|
|
printf("%lld\n", res);
|
|
|
|
|
|
|
|
|
|
// 方法2:
|
|
|
|
|
// printf("%lld\n", query(bl));
|
|
|
|
|
return 0;
|
|
|
|
|
}
|