讨论 / 发布标程Boat(官方!)
飞雪天涯 2009-09-13 08:31:00
点我顶贴 收藏 删除
rq为什么不让Unaccepted的人发布标程,气愤orz

#include <stdio.h>

#include <algorithm>

using namespace std;

const int M=100005;

int a[M],b[M],srt[M];

int arr[M],brr[M];

bool cmp(int x,int y)

{

return (a[x]<a[y] || a[x]==a[y] && b[x]<b[y]);

}

int LIS(int n)

{

int i,s,t,L,R,M,rt=1;

if(n==0)

return 0;

brr[1]=arr[0];

for(i=1;i<n;i++)

if(brr[rt]<arr[i])

brr[++rt]=arr[i];

else if(brr[1]>=arr[i])

brr[1]=arr[i];

else

{

L=1;R=rt;t=0;

while(L<R)

{

M=(L+R)/2;

if(brr[M]<arr[i])

{

t=M;

L=M+1;

}

else

R=M-1;

}

brr[t+1]=arr[i];

}

return rt;

}

int main(void)

{

int n,max,i,j,p,q,k;

while(scanf("%d",&n)!=EOF)

{

for(i=0;i<n;i++)

scanf("%d%d",&a[i],&b[i]);

for(i=0;i<n;i++)

srt[i]=i;

sort(srt,srt+n,cmp);

max=0;

for(j=0;j<n;j++)

{

i=srt[j];

q=0;

for(k=j+1;k<n && a[srt[k]]<b[i];k++)

if(b[srt[k]]>b[i])

arr[q++]=b[srt[k]];

p=LIS(q)+1;

if(max<p) max=p;

}

printf("%d\n",max);

}

return 0;

}

#1 xxwzy@2009-06-29 17:09:00
回复 删除
没数据的题你能AC?

膜拜…………

#2 xxwzy@2009-06-29 17:10:00
回复 删除
有P的吗?
#3 飞雪天涯@2009-09-13 08:31:00
回复 删除
自己译!
#4 drcool@2014-03-06 05:50:39
回复 删除
谁能解释一下?看不懂思路。另外纯模拟是否可以?
查看更多回复
提交回复