| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
Re:Nlog2(N)In Reply To:Nlog2(N) Posted by:lithum at 2009-08-04 19:55:04 感谢,终于让我明白了这个NlogN是咋来的了,万分感激。。。
> //二分图不交叉最大匹配问题其实就是最长递增序列问题
> #include<iostream>
> using namespace std;
>
> const int SIZE=40010;
>
> int map[SIZE];
> int arr[SIZE];
> int l;//跟踪记录arr的长度
> int Max;
>
> void append(int x);
> void change(int x);
> int main()
> {
> //freopen("input.txt","r",stdin);
> int i;
> int n;
> int cases;
> cin>>cases;
> while(cases--)
> {
> memset(arr,0,sizeof(arr));
> Max=-1; l=0;
> cin>>n;
> for(i=1;i<=n;i++){
> scanf("%d",&map[i]);
> if(map[i]>Max) append(map[i]);
> else change(map[i]);
> }
> cout<<l<<endl;
> }
> return 0;
> }
>
> void append(int x)
> {
> arr[l]=x;
> Max=arr[l];
> l++;
> }
>
> void change(int x)
> {
> int low=0,high=l-1;
> int i;
> if(x<arr[0]) high=0;
> else{
> while(high-low>1)
> {
> i=(low+high)/2;
> if(arr[i]<x) low=i;
> else high=i;//if(arr[i]>x) 此题的条件决定了不可能有arr[i]==x的情况发生
> }
> }
> arr[high]=x;
> Max=arr[l-1];
> }
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator