Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
52437 AK2022071341 木板游戏 C++ 解答错误 75 174 MS 13928 KB 1039 2022-07-19 12:11:41

Tests(15/20):


#include<bits/stdc++.h> #define ll long long #define lb(x) (x&-x) using namespace std; const int N=5e5+10; inline ll read(){ ll x=0,f=1,c=getchar(); while(c<'0'||c>'9')f=(c=='-'?-1:1),c=getchar(); while(c>='0'&&c<='9')x=(x<<1)+(x<<3)+(c^48),c=getchar(); return x*f; } int n,id[N],rnk[N],dp[N]; struct Node{ int l,r; }t[N]; inline bool cmp(Node a,Node b){ return a.l==b.l?a.r>b.r:a.l<b.l; } inline bool cmp2(int a,int b){ return t[a].r>t[b].r; } int T[N]; inline void add(int x,int k){ for(;x<=n;x+=lb(x))T[x]=max(T[x],k); } inline int query(int x,int A=0){ for(;x;x-=lb(x))A=max(A,T[x]); return A; } int main(){ n=read(); for(int i=1;i<=n;i++)t[i].l=read(),t[i].r=read(),id[i]=i; sort(t+1,t+n+1,cmp); sort(id+1,id+n+1,cmp2); for(int i=1;i<=n;i++)rnk[id[i]]=i; for(int i=1;i<=n;i++){ dp[i]=query(rnk[i]-1)+1; add(rnk[i],dp[i]); } // for(int i=1;i<=n;i++)printf("%d ",rnk[i]); // puts(""); int ans=0; for(int i=1;i<=n;i++)ans=max(ans,dp[i]); printf("%d",ans); return 0; }


测评信息: