标签:
#include <iostream> #include <cstdio> #include <algorithm> #include <string.h> using namespace std; const int maxn=1005; int a[maxn],b[maxn]; int c[maxn][maxn*2],h[maxn*2],L; int lowbit(int x){ return x&(-x); } void add(int loc, int floor,int v){ while(loc<=L){ c[floor][loc]=max(v,c[floor][loc]); loc+=lowbit(loc); } } int sum(int loc, int floor){ int ans=0; while(loc>0){ ans=max(c[floor][loc],ans); loc-=lowbit(loc); } return ans; } int main() { int cas; scanf("%d",&cas); while(cas--){ int n,m; scanf("%d%d",&n,&m); L=0; for(int i=0; i<n; ++i){ scanf("%d%d",&a[i],&b[i]); h[L++]=a[i]; h[L++]=b[i]; } memset(c,0,sizeof(c)); sort(h,h+L); L=unique(h,h+L)-h; int ans=1; for(int i=0; i<n; ++i){ int loca = lower_bound(h,h+L,a[i])-h+1; int locb = lower_bound(h,h+L,b[i])-h+1; int val; for(int j=min(i+1,m);j>0; j--){ val = sum(loca-1,j); ans=max(ans,val+1); add(loca,j,val+1); val = sum(locb-1,j-1); ans=max(ans,val+1); add(locb,j,val+1); } val = sum(loca-1,0); ans=max(ans,val+1); add(loca,0,val+1); } printf("%d\n",ans); } return 0; }
标签:
原文地址:http://www.cnblogs.com/Opaser/p/4160740.html