tjut 3525

原创 2016年08月31日 09:51:32
#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;  
}  

版权声明:本文为博主原创文章,未经博主允许不得转载。

POJ 3525 半平面交

#include #include #include #include #include using namespace std; struct Point { double x, y; ...
  • Tczxw
  • Tczxw
  • 2016年03月17日 20:19
  • 124

poj 3525 多边形内核,缩进

The main land of Japan called Honshu is an island surrounded by the sea. In such an island, it is na...
  • Summer__show_
  • Summer__show_
  • 2017年08月10日 10:49
  • 100

[POJ]3525 半平面交

Most Distant Point from the Sea Time Limit: 5000MS   Memory Limit: 65536K Total Subm...
  • MaxMercer
  • MaxMercer
  • 2017年12月03日 21:08
  • 51

POJ 3525 二分+半面相交

题意:给定一个凸多边形问能包裹圆的最大半径。 将每条边向内移动距离d,知道半面相交的内核不存在,确定最大的d并且达到精度就可以了。 #include #include #include #in...
  • h6363817
  • h6363817
  • 2013年03月26日 10:38
  • 563

POJ 3525 二分+半平面交

Most Distant Point from the Sea Time Limit: 5000MS   Memory Limit: 65536K Total Subm...
  • u012358934
  • u012358934
  • 2014年05月10日 09:28
  • 774

Shiro(2) 会话管理

我们知道web应用中,容器通过session来保持会话,并且存储一些会话数据。 而Shiro除了提供安全验证,还提供了一个完整的企业级Session会话解决方案,使得即使是非Web应用也可以进行会话...
  • u010478214
  • u010478214
  • 2017年06月19日 15:24
  • 253

POJ 3525 二分答案,推进多边形和半平面交

转载:http://blog.csdn.net/non_cease/article/details/7814970 题目在问这样一个问题:给定一个凸多边形,找到其中的一个点,使得其到每条边的距离最小...
  • qq_31457873
  • qq_31457873
  • 2016年05月17日 13:10
  • 201

POJ 3525 二分答案,推进多边形和半平面交

题目在问这样一个问题:给定一个凸多边形,找到一个
  • u011808175
  • u011808175
  • 2014年09月02日 16:16
  • 504

半平面交 poj 3335(判断是否有内核) poj 3525 (半平面交+二分)

poj 3335 Description This year, ACM/ICPC World finals will be held in a hall in form of a simpl...
  • winycg
  • winycg
  • 2016年05月13日 20:18
  • 187

POJ 3525 Most Distant Point from the Sea (半平面交+二分求最大内切圆)

Most Distant Point from the Sea Time Limit: 5000MS Memory Limit: 65536K Total...
  • qq_34374664
  • qq_34374664
  • 2017年04月15日 15:10
  • 668
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:tjut 3525
举报原因:
原因补充:

(最多只允许输入30个字)