2 条题解
-
0
#include <bits/stdc++.h> #define lowbit(x) (x&-x) const int N=1e5+10; using namespace std; typedef long long ll; bool debug1; int n; ll s[N],a[N],b[N],f[N],ans; bool debug2; void change(int x,ll k){ for(int i=x;i<=n;i+=lowbit(i)) s[i]=max(s[i],k); } ll query(int x){ ll t=0; for(int i=x;i;i-=lowbit(i)) t=max(t,s[i]); return t; } int main(){ // freopen("data.in","r",stdin); // freopen("my.out","w",stdout); // cout<<((&debug2-&debug1)/1024.0/1024.0)<<endl; scanf("%d",&n); for(int i=1;i<=n;i++){ scanf("%lld",&a[i]); b[i]=a[i]; } sort(b+1,b+n+1); unique(b+1,b+n+1); for(int i=1;i<=n;i++){ int k=lower_bound(b+1,b+n+1,a[i])-b; f[i]=query(k-1)+a[i]; change(k,f[i]); } for(int i=1;i<=n;i++) ans=max(ans,f[i]); printf("%lld",ans); return 0; } -
0
#include <bits/stdc++.h> #define lowbit(x) (x&-x) const int N=1e5+10; using namespace std; typedef long long ll; bool debug1; int n; ll s[N],a[N],b[N],f[N],ans; bool debug2; void change(int x,ll k){ for(int i=x;i<=n;i+=lowbit(i)) s[i]=max(s[i],k); } ll query(int x){ ll t=0; for(int i=x;i;i-=lowbit(i)) t=max(t,s[i]); return t; } int main(){ // freopen("data.in","r",stdin); // freopen("my.out","w",stdout); // cout<<((&debug2-&debug1)/1024.0/1024.0)<<endl; scanf("%d",&n); for(int i=1;i<=n;i++){ scanf("%lld",&a[i]); b[i]=a[i]; } sort(b+1,b+n+1); unique(b+1,b+n+1); for(int i=1;i<=n;i++){ int k=lower_bound(b+1,b+n+1,a[i])-b; f[i]=query(k-1)+a[i]; change(k,f[i]); } for(int i=1;i<=n;i++) ans=max(ans,f[i]); printf("%lld",ans); return 0; }
- 1
信息
- ID
- 1535
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 7
- 已通过
- 3
- 上传者