1264: [AHOI2006]基因匹配Match

Time Limit: 10 Sec  Memory Limit: 162 MB
Submit: 1211  Solved: 798
[Submit][Status][Discuss]

Description

基因匹配(match) 卡卡昨天晚上做梦梦见他和可可来到了另外一个星球,这个星球上生物的DNA序列由无数种碱基排列而成(地球上只有4种),而更奇怪的是,组成DNA序列的每一种碱基在该序列中正好出现5次!这样如果一个DNA序列有N种不同的碱基构成,那么它的长度一定是5N。 卡卡醒来后向可可叙述了这个奇怪的梦,而可可这些日子正在研究生物信息学中的基因匹配问题,于是他决定为这个奇怪星球上的生物写一个简单的DNA匹配程序。 为了描述基因匹配的原理,我们需要先定义子序列的概念:若从一个DNA序列(字符串)s中任意抽取一些碱基(字符),将它们仍按在s中的顺序排列成一个新串u,则称u是s的一个子序列。对于两个DNA序列s1和s2,如果存在一个序列u同时成为s1和s2的子序列,则称u是s1和s2的公共子序列。 卡卡已知两个DNA序列s1和s2,求s1和s2的最大匹配就是指s1和s2最长公共子序列的长度。 [任务] 编写一个程序:  从输入文件中读入两个等长的DNA序列;  计算它们的最大匹配;  向输出文件打印你得到的结果。

Input

输入文件中第一行有一个整数N,表示这个星球上某种生物使用了N种不同的碱基,以后将它们编号为1…N的整数。 以下还有两行,每行描述一个DNA序列:包含5N个1…N的整数,且每一个整数在对应的序列中正好出现5次。

Output

输出文件中只有一个整数,即两个DNA序列的最大匹配数目。

Sample Input

2
1 1 2 2 1 1 2 1 2 2
1 2 2 2 1 1 2 2 1 1

Sample Output

7

这题其实就是裸的最长公共子序列

但是!长度有100000那么大,n²肯定是不可能的

不过题目中有说:

①两个数组长度相同,都为5*n

②[1, n]中每个数字一定出现刚好5次

这样就可以记下第二个数组每个数字的位置,

然后遍历第一个数组,对于每个数字找第二个数组中对应数字的位置(倒着来)

求个前缀最大值并更新即可

复杂度O(5nlogn)

#include<stdio.h>
#include<algorithm>
using namespace std;
int n, a[100005], tre[404405], shu[20005][6];
int Query(int l, int r, int x, int a, int b)
{int m, ans = 0;if(a>b)return 0;if(l>=a && r<=b)return tre[x];m = (l+r)/2;if(a<=m)ans = max(ans, Query(l, m, x*2, a, b));if(b>=m+1)ans = max(ans, Query(m+1, r, x*2+1, a, b));return ans;
}
void Update(int l, int r, int x, int a, int b)
{int m;if(l==r){tre[x] = max(tre[x], b);return;}m = (l+r)/2;if(a<=m)Update(l, m, x*2, a, b);elseUpdate(m+1, r, x*2+1, a, b);tre[x] = max(tre[x*2], tre[x*2+1]);
}
int main(void)
{int n, i, j, x, ans, loc, bet;scanf("%d", &n);n *= 5;for(i=1;i<=n;i++)scanf("%d", &a[i]);for(i=1;i<=n;i++){scanf("%d", &x);shu[x][++shu[x][0]] = i;}ans = 1;for(i=1;i<=n;i++){for(j=5;j>=1;j--){loc = shu[a[i]][j];bet = Query(1, n, 1, 1, loc-1)+1;ans = max(ans, bet);Update(1, n, 1, loc, bet);}}printf("%d\n", ans);return 0;
}

bzoj 1264: [AHOI2006]基因匹配Match(树状数组)相关推荐

  1. bzoj 1264: [AHOI2006]基因匹配Match (树状数组优化dp)

    链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1264 思路: n大小为20000*5,而一般的dp求最长公共子序列复杂度是 n*n的,所以我 ...

  2. 1264: [AHOI2006]基因匹配Match

    1264: [AHOI2006]基因匹配Match Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 982  Solved: 635 [Submit] ...

  3. BZOJ.4888.[TJOI2017]异或和(树状数组)

    BZOJ 洛谷 \(Description\) 求所有区间和的异或和. \(n\leq 10^5,\ \sum a_i\leq 10^6\). \(Solution\) 这样的题还是要先考虑按位做. ...

  4. BZOJ.3648.寝室管理(点分治 树状数组)

    BZOJ \(Description\) 求在一棵树上加一条边后,有多少条至少有\(k\)个点的路径. \(n\leq10^5\). \(Solution\) 对于一棵树的情况,可以点分治. 用树状数 ...

  5. BZOJ 1176: [Balkan2007]Mokia( CDQ分治 + 树状数组 )

    考虑cdq分治, 对于[l, r)递归[l, m), [m, r); 然后计算[l, m)的操作对[m, r)中询问的影响就可以了. 具体就是差分答案+排序+离散化然后树状数组维护.操作数为M的话时间 ...

  6. 【BZOJ】1012: [JSOI2008]最大数maxnumber 树状数组求区间最值

    题目链接:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1012 题意:维护一个数列,开始时没有数值,之后会有两种操作, Q L :查询数列末 ...

  7. bzoj 1878: [SDOI2009]HH的项链 ——树状数组+ 差分

    Description HH有一串由各种漂亮的贝壳组成的项链.HH相信不同的贝壳会带来好运,所以每次散步 完后,他都会随意取出一 段贝壳,思考它们所表达的含义.HH不断地收集新的贝壳,因此他的项链变得 ...

  8. bzoj 2131: 免费的馅饼(树状数组+DP)

    2131: 免费的馅饼 Time Limit: 10 Sec  Memory Limit: 259 MB Submit: 408  Solved: 245 [Submit][Status][Discu ...

  9. 【BZOJ 3155】Preprefix sum(树状数组)

    显然是不能直接开两个树状数组维护 前缀和,前缀和的前缀和.因为一旦对a[i]进行修改,将会影响许多位前缀和的前缀和 我们考虑对式子变一下形 Qi =S1+S2+S3+...+Si =a1+a1+a2+ ...

最新文章

  1. angular中集中页面传参(我只是知识的搬运工)
  2. Cache一致性与2种基本写策略(1)
  3. Leetcode 223. 矩形面积 解题思路及C++实现
  4. C++继承时的名字遮蔽(一)
  5. python 需要多久能够学精通_python入门到精通需要学多久-史上最详细python学习路线-从入门到精通,只需5个月时间...
  6. Android对应用程序签名
  7. 2017年最新基于Bootstrap 4 的专业、多用途响应式布局的系统模板
  8. python try expect 多个except3.7_python try小例子
  9. Centos 监控进程,并自动重启
  10. 紧追SpaceX,又一星际飞船明年4月要首次载人飞行
  11. redis---队列的操作
  12. lamp搭建wordpress后升级安装主题,提示输入ftp账号密码
  13. opencv:image-imageData+image-widthStep*i)[j]表达式含义
  14. ArcGIS Engine打开文件地理数据库
  15. hdp ambari Confirm Hosts 部署错误问题
  16. 超高分辨率大屏拼接工作站硬件选型
  17. 计算机关机界面卡住,电脑关机时卡在关机界面的解决方法
  18. Masked Autoencoders Are Scalable Vision Learners
  19. 项目经理领导力提升与塑造:从自己干到团队干
  20. 28岁想入行软件测试,可行吗?

热门文章

  1. python工资这么高为什么不学-为什么Python岗位薪资越来越高
  2. 零基础学python比较好的网课-请问自学 Python 有必要买课程吗?
  3. python3.8.5-Python 3.8.5下载
  4. 免费python自学攻略-Python自学攻略
  5. python和c先学哪个-初学者python和c语言先学哪个好呢?
  6. php和python-Python与PHP的一些区别
  7. 解决从登录页通过this.$router.push跳转首页后 点返回健路由变而页面不变的问题
  8. python中如何导入数据包_如何在python中发送数据包?
  9. shell遍历根目录_大厂运维高手如何打造核心竞争力?这些Shell命令合集得知道!...
  10. 【宽度优先搜索】计蒜客:蒜头君回家(带条件的BFS)