2012-A3-0012
从 Trac 迁移的文章
这是从旧校内 Wiki 迁移的文章,可能存在一些样式问题,您可以向 memset0 反馈。
原文章内容如下:
题意:双方各N人,甲方每个人都有一个必然能战胜的人,甲乙双方方必须按编号从小到大,问甲方能否战胜一半及以上的场次..
排序后求个最长上升子序列
{{{
#include<cstdio>
#include<algorithm>
using namespace std;
typedef size_t tp;
#define F first
#define S second
pair<tp,tp> p[102400];
tp q[102400];
int main(){
for(tp n,m;~scanf("%u",&n);m*2<n?puts("-1"):printf("%u\n",m)){
for(tp i=0;i<n;++i)
scanf("%u%u",&p[i].F,&p[i].S);
sort(p,p+n);
q[m=0]=0;
for(tp i=0;i<n;++i)
if(p[i].S>q[m])q[++m]=p[i].S;
else *upper_bound(q,q+m,p[i].S) = p[i].S;
}
}
}}}
题意:双方各N人,甲方每个人都有一个必然能战胜的人,甲乙双方方必须按编号从小到大,问甲方能否战胜一半及以上的场次..
排序后求个最长上升子序列
#include<cstdio>
#include<algorithm>
using namespace std;
typedef size_t tp;
#define F first
#define S second
pair<tp,tp> p[102400];
tp q[102400];
int main(){
for(tp n,m;~scanf("%u",&n);m*2<n?puts("-1"):printf("%u\n",m)){
for(tp i=0;i<n;++i)
scanf("%u%u",&p[i].F,&p[i].S);
sort(p,p+n);
q[m=0]=0;
for(tp i=0;i<n;++i)
if(p[i].S>q[m])q[++m]=p[i].S;
else *upper_bound(q,q+m,p[i].S) = p[i].S;
}
}