2 条题解
-
0
#include <bits/stdc++.h> using namespace std; #define ll long long const int N = 200010; int n,h[N]; ll a[N],c[N]; void add(int x,ll k){for(;x <= n; x += x & -x ) c[x] = max(c[x], k);} ll query(int x) { ll res= 0; for (; x; x -= x & -x) res = max(res, c[x]); return res; } int main() { scanf("%d", &n); for (int i = 1; i <= n; ++i) scanf("%d", &h[i]); for (int i = 1; i <= n; ++i) scanf("%lld", &a[i]); ll ans=0; for (int i = 1; i <= n; ++i) { ll fi = query(h[i] - 1) + a[i]; // 区间查询最大值 add(h[i], fi); // 塞入当前 fi 的值 ans = max(ans, fi); // 记录答案 } printf("%lld", ans); return 0; } -
0
#include <bits/stdc++.h> using namespace std; #define ll long long const int N = 200010; int n,h[N]; ll a[N],c[N]; void add(int x,ll k){for(;x <= n; x += x & -x ) c[x] = max(c[x], k);} ll query(int x) { ll res= 0; for (; x; x -= x & -x) res = max(res, c[x]); return res; } int main() { scanf("%d", &n); for (int i = 1; i <= n; ++i) scanf("%d", &h[i]); for (int i = 1; i <= n; ++i) scanf("%lld", &a[i]); ll ans=0; for (int i = 1; i <= n; ++i) { ll fi = query(h[i] - 1) + a[i]; // 区间查询最大值 add(h[i], fi); // 塞入当前 fi 的值 ans = max(ans, fi); // 记录答案 } printf("%lld", ans); return 0; }
- 1
信息
- ID
- 1898
- 时间
- 2000ms
- 内存
- 1024MiB
- 难度
- 7
- 标签
- 递交数
- 28
- 已通过
- 9
- 上传者