 /**//*
給出如圖的電路布線,求最大的一塊,其中里面的線兩兩相交
n<=10^6
看解題報告的:
http://itbhu.ac.in/codefest/problem.php?pid=102
它說這是一個Permutation Graph
先將上面那排的數(shù)字映射為1,2, ,n,然后下面那排再映射一下
其中的最大圖就是最長下降子序列了 -------------------------------OMG
O(nlogn)
*/
#include<iostream>
#include<cstring>
#include<map>
#include<algorithm>
#include<stack>
#include<queue>
#include<cmath>
#include<string>
#include<cstdlib>
#include<vector>
#include<cstdio>
#include<set>
#include<list>
#include<numeric>
#include<cassert>
#include<ctime>
#include<bitset>

using namespace std;

const int MAXN = 1000010;

int a[MAXN];

 bool cmp(const int &a , const int &b) {
return a > b;
}

int main()
  {
#ifndef ONLINE_JUDGE
freopen("in","r",stdin);
#endif
ios::sync_with_stdio(false);//取消跟stdin的同步 然后cin,cout就不要跟scanf,printf混用了
 for (int n ; cin>>n ; ) {
 for (int i = 1, x ; i <= n ; i++) {
cin>>x;
a[x] = i;//
}
vector<int> rec;
 for (int i = 1, x; i <= n ; i ++) {
cin>>x;
x = a[x];//
int pos = upper_bound(rec.begin(), rec.end(), x, cmp) - rec.begin();
 if(pos == rec.size()) {
rec.push_back(0);
}
rec[pos] = x;
}
cout<<rec.size()<<endl;
}
return 0;
}
|
|
常用鏈接
隨筆分類
Links
搜索
最新評論

|
|