tjut 3525
#include <iostream>  
#include <cstdio>  
#include <vector>  
#include <cmath>  
#include <set>  
using namespace std;  
  
const int maxn=200100;  
vector <int> va,vb,data,dp;  
vector <vector <int> > v;  
set <int> sa,sb;  
int da[maxn],db[maxn],n,m;  
  
void initial(){  
    va.clear(),vb.clear();  
    sa.clear(),sb.clear();  
    v.clear(),data.clear();  
    dp.clear();  
    for(int i=1;i<=2*n*m;i++){  
        da[i]=-1;db[i]=-1;  
        sa.insert(i),sb.insert(i);  
    }  
}  
  
void input(){  
    set <int>::iterator it;  
    int x,pos;  
    for(int i=0;i<n*m;i++){  
        scanf("%d%d",&x,&pos);  
        if(da[pos]==-1){  
            da[pos]=x;  
            sa.erase(pos);  
        }  
        else{  
            it=sa.upper_bound(pos);  
            da[*it]=x;  
            sa.erase(it);  
        }  
    }  
    for(int i=0;i<n*m;i++){  
        scanf("%d%d",&x,&pos);  
        if(db[pos]==-1){  
            db[pos]=x;  
            sb.erase(pos);  
        }  
        else{  
            it=sb.upper_bound(pos);  
            db[*it]=x;  
            sb.erase(it);  
        }  
    }  
    for(int i=1;i<=2*n*m;i++){  
        if(da[i]!=-1) va.push_back(da[i]);  
        if(db[i]!=-1) vb.push_back(db[i]);  
    }  
}  
  
void computing(int casen){  
    int len=va.size();  
    v.resize(n+1);  
    for(int i=0;i<len;i++) v[va[i]].push_back(i+1);  
    for(int i=0;i<len;i++){  
        int s=vb[i];  
        for(int t=v[s].size()-1;t>=0;t--){  
            data.push_back(v[s][t]);  
        }  
    }  
    dp.push_back(-1);  
    for(int i=0;i<data.size();i++){  
        int l=0,r=dp.size()-1;  
        if(data[i]>dp[r]) dp.push_back(data[i]);  
        else{  
            while(l<r){  
                int mid=(l+r)/2;  
                if(data[i]<=dp[mid]) r=mid;  
                else l=mid+1;  
            }  
            dp[r]=data[i];  
        }  
    }  
    printf("Case #%d: %d\n",casen,dp.size()-1);  
  
}  
  
int main(){  
    int t;  
    scanf("%d",&t);  
    for(int i=1;i<=t;i++){  
        scanf("%d%d",&n,&m);  
        initial();  
        input();  
        computing(i);  
    }  
    return 0;  
}  

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/luozhong11/article/details/52382011
个人分类: DP
想对作者说点什么? 我来说一句

3525频率计算器

2015年08月31日 28KB 下载

SG3525 TL494频率计算软件.xls

2014年06月21日 17KB 下载

基于GS3525的PWM脉宽调速控制电流

2013年12月04日 1005KB 下载

SG3525开关电源芯片

2012年07月29日 13.47MB 下载

没有更多推荐了,返回首页

不良信息举报

tjut 3525

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭