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 |
Nlog2(N)//二分图不交叉最大匹配问题其实就是最长递增序列问题 #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