求助站外题
  • 板块学术版
  • 楼主NoSignal_CN
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/5/25 19:14
  • 上次更新2024/5/25 21:27:23
查看原帖
求助站外题
1336385
NoSignal_CN楼主2024/5/25 19:14

题面

//Code by SweetRain2891!
#include <bits/stdc++.h>
#define int long long
#define lowbit(x) (x&-x)
#define pii pair<int,int>
#define fi first
#define se second
#define mp(x,y) make_pair(x,y)
#define pb(x) push_back(x)
#define size(s) (int)s.size()
#define all(s) s.begin(),s.end()
using namespace std;
const int maxn=1e5+10;
int n,m,p,dp[maxn],tot;
map<int,int> mp;
int inline update(int &x,int y){
    return x=max(x,y);
}
void inline modify(int x,int k){
    while(x<=tot){
        update(dp[x],k);
        x+=lowbit(x);
    }
}
int inline query(int x){
    int res=0;
    while(x>0){
        update(res,dp[x]);
        x^=lowbit(x);
    }
    return res;
}
bool inline cmp(pii x,pii y){
    return x.se>y.se;
}
vector<pii> v;
signed main(){
    ios::sync_with_stdio(false);
    cin.tie(0),cout.tie(0);
    #ifndef ONLINE_JUDGE
        freopen("input.txt","r",stdin);
        freopen("output.txt","w",stdout);
    #endif
    cin >> n >> m >> p;
    for(int i=1;i<=p;i++){
        int x,y;
        cin >> x >> y;
        v.pb(mp(x,y));
    }
    sort(all(v),cmp);
    for(int i=0;i<p;i++){
        if(mp.find(v[i].se)==mp.end()){
            mp[v[i].se]=++tot;
        }
    }
    sort(all(v));
    for(int i=0;i<size(v);i++){
        modify(mp[v[i].se],query(mp[v[i].se]-1)+1);
    }
    cout << query(tot) << endl;
    return 0;
}
2024/5/25 19:14
加载中...