求助
  • 板块灌水区
  • 楼主WD2c0mP
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/9/30 17:22
  • 上次更新2023/11/2 16:56:56
查看原帖
求助
780641
WD2c0mP楼主2023/9/30 17:22

B3637

#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,a[1000010],dp[1000010],t[1000010];
int lowbit(int x) {return x & -x;}
void add(int x,int c) {
    for (int i = x;i <= n;i += lowbit(i)) {
        t[i] = max(t[i],c);
    }
}
int ask(int x) {
    int ans = 0;
    for (int i = x;i;i -= lowbit(i)) {
        ans = max(ans,t[i]);
    }
    return ans;
}
signed main(){
    cin >> n;
    int ans = 0;
	memset (t,0,sizeof(t));
    for (int i = 1;i <= n;i ++) {
        cin >> a[i];
    }
    for (int i = 1;i <= n;i ++) {
        dp[i] = ask(a[i] - 1) + 1;
        ans = max(ans,dp[i]);
        add(a[i],dp[i]);
    }
    cout << ans << endl;
    return 0;
}
2023/9/30 17:22
加载中...