码迷,mamicode.com
首页 > 其他好文 > 详细

Codeforces 340D Bubble Sort Graph 规律+LIS

时间:2017-06-28 14:23:41      阅读:163      评论:0      收藏:0      [点我收藏+]

标签:name   冒泡   com   lis   typedef   bit   元素   个数   排列   

http://codeforces.com/problemset/problem/340/D

题意:给出一个n个数构成的排列,类似冒泡排序,若a[i]>a[i+1] a[i]-a[i+1]连边 并swap(a[i],a[i+1])
反复操作 直到排序结束,n<=1e5,问该图构成的最大独立集大小为?

最大独立集:集合中任意两点无边相连.

直接建图显然不行,找规律:a[i]和后面比它大的都不会连边.
a[i],x,y下标递增,冒泡排序,a[i]<x<y x和y不可能交换
x>y 则x一定会被交换到y之后 每次又是两个相邻元素交换 则x-y一定有边
所以 本题独立集的元素单调递增 O(nlogn)求LIS即可

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int inf=1e9;
const int N=2e5+20;
int n,a[N],f[N];
int L[N];//L[i],LIS3¤?è?aiμ?×?D??á?2a[j] 
int main()
{
	while(cin>>n)
	{
		for(int i=1;i<=n;i++)
			scanf("%d",&a[i]),L[i]=inf;
		L[0]=-inf;
		for(int i=1;i<=n;i++)
		{
		 	int l=0,r=n;
			while(l<=r)
			{
				int mid=(l+r)>>1;
				if(a[i]>L[mid]) 
					l=mid+1;
				else
					r=mid-1;	
			}
			f[i]=l;
			L[l]=a[i];//L[l]>a[i]	
		//a[i]>L[l-1] ?üD?L[l]oó L[l]>L[l-1] LDòáDòàè?μ¥μ÷μY?? 
		}	
		int ans=0;
		for(int i=1;i<=n;i++)
			ans=max(ans,f[i]); 
		cout<<ans<<endl;
	}
	
	return 0;
}

  

 

Codeforces 340D Bubble Sort Graph 规律+LIS

标签:name   冒泡   com   lis   typedef   bit   元素   个数   排列   

原文地址:http://www.cnblogs.com/HIKARI1149/p/7089257.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!