UVA
来源:互联网 发布:js里面怎么让div隐藏 编辑:程序博客网 时间:2024/06/05 08:18
首先每个序列的各个数字互不相同,可以给 a 串中的每个数字标一个编号(1 - n)
然后(把 b 中的每个数字也附上编号,)按照 a 中的数字所对应的编号,给 b 中每个数字附上相应的编号
这样 只需要求 b 编号序列的 最长上升子序列长度就好了
因为题中说了 第一个数字是1,b的第一个编号一定是1,所以不用担心 b 中出现而a 中没有的数字编号为0 会影响结果
代码如下:
#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<set>#include<stack>#include<queue>#include<algorithm>// cout << " === " << endl;using namespace std;typedef long long ll;const int maxn = 100000 + 7, INF = 0x3f3f3f3f, mod = 1e9+7;int T, n, p, q, ans;int a[maxn], b[maxn], c[maxn], d[maxn];void init() { memset(a, 0, sizeof a); memset(b, 0, sizeof b); memset(c, 0, sizeof c); for(int i = 1; i <= p; ++i) scanf("%d", &a[i]); for(int i = 0; i < q; ++i) scanf("%d", &b[i]); for(int i = 1; i <= p; ++i) c[a[i]] = i; for(int i = 0; i < q; ++i) b[i] = c[b[i]];}void solve() { memset(d, INF, sizeof d); for(int i = 0; i < q; ++i) *lower_bound(d, d+q+1, b[i]) = b[i]; int ans = lower_bound(d, d+q+1, INF) - d; printf("%d\n", ans);}int main() { scanf("%d", &T); int kase = 1; while(T--) { scanf("%d%d%d", &n, &p, &q); p++, q++; init(); printf("Case %d: ", kase++); solve(); } return 0;}
阅读全文
1 0
- uva
- UVA
- UVA
- UVA
- uva
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- Enum使用
- hbase性能调优
- ios-多线程访问共享资源
- Binary Protocol (Codeforces
- java之static语法详解
- UVA
- WPF布局篇(三)
- 企业数据分析,搞定这3个重点事半功倍!
- Android尺寸转换
- 【Python】 两行命令将.py 的Python脚本 转换成.exe 程序
- Python中的map()和reduce()函数
- Python之添加新元素
- python数据类型------list(列表)
- 线段树部分操作