bzoj 1264: [AHOI2006]基因匹配Match(树状数组)
1264: [AHOI2006]基因匹配Match
Time Limit: 10 Sec Memory Limit: 162 MB
Submit: 1211 Solved: 798
[Submit][Status][Discuss]
Description
Input
Output
Sample Input
Sample Output
这题其实就是裸的最长公共子序列
但是!长度有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(树状数组)相关推荐
- bzoj 1264: [AHOI2006]基因匹配Match (树状数组优化dp)
链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1264 思路: n大小为20000*5,而一般的dp求最长公共子序列复杂度是 n*n的,所以我 ...
- 1264: [AHOI2006]基因匹配Match
1264: [AHOI2006]基因匹配Match Time Limit: 10 Sec Memory Limit: 162 MB Submit: 982 Solved: 635 [Submit] ...
- BZOJ.4888.[TJOI2017]异或和(树状数组)
BZOJ 洛谷 \(Description\) 求所有区间和的异或和. \(n\leq 10^5,\ \sum a_i\leq 10^6\). \(Solution\) 这样的题还是要先考虑按位做. ...
- BZOJ.3648.寝室管理(点分治 树状数组)
BZOJ \(Description\) 求在一棵树上加一条边后,有多少条至少有\(k\)个点的路径. \(n\leq10^5\). \(Solution\) 对于一棵树的情况,可以点分治. 用树状数 ...
- BZOJ 1176: [Balkan2007]Mokia( CDQ分治 + 树状数组 )
考虑cdq分治, 对于[l, r)递归[l, m), [m, r); 然后计算[l, m)的操作对[m, r)中询问的影响就可以了. 具体就是差分答案+排序+离散化然后树状数组维护.操作数为M的话时间 ...
- 【BZOJ】1012: [JSOI2008]最大数maxnumber 树状数组求区间最值
题目链接:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1012 题意:维护一个数列,开始时没有数值,之后会有两种操作, Q L :查询数列末 ...
- bzoj 1878: [SDOI2009]HH的项链 ——树状数组+ 差分
Description HH有一串由各种漂亮的贝壳组成的项链.HH相信不同的贝壳会带来好运,所以每次散步 完后,他都会随意取出一 段贝壳,思考它们所表达的含义.HH不断地收集新的贝壳,因此他的项链变得 ...
- bzoj 2131: 免费的馅饼(树状数组+DP)
2131: 免费的馅饼 Time Limit: 10 Sec Memory Limit: 259 MB Submit: 408 Solved: 245 [Submit][Status][Discu ...
- 【BZOJ 3155】Preprefix sum(树状数组)
显然是不能直接开两个树状数组维护 前缀和,前缀和的前缀和.因为一旦对a[i]进行修改,将会影响许多位前缀和的前缀和 我们考虑对式子变一下形 Qi =S1+S2+S3+...+Si =a1+a1+a2+ ...
最新文章
- angular中集中页面传参(我只是知识的搬运工)
- Cache一致性与2种基本写策略(1)
- Leetcode 223. 矩形面积 解题思路及C++实现
- C++继承时的名字遮蔽(一)
- python 需要多久能够学精通_python入门到精通需要学多久-史上最详细python学习路线-从入门到精通,只需5个月时间...
- Android对应用程序签名
- 2017年最新基于Bootstrap 4 的专业、多用途响应式布局的系统模板
- python try expect 多个except3.7_python try小例子
- Centos 监控进程,并自动重启
- 紧追SpaceX,又一星际飞船明年4月要首次载人飞行
- redis---队列的操作
- lamp搭建wordpress后升级安装主题,提示输入ftp账号密码
- opencv:image-imageData+image-widthStep*i)[j]表达式含义
- ArcGIS Engine打开文件地理数据库
- hdp ambari Confirm Hosts 部署错误问题
- 超高分辨率大屏拼接工作站硬件选型
- 计算机关机界面卡住,电脑关机时卡在关机界面的解决方法
- Masked Autoencoders Are Scalable Vision Learners
- 项目经理领导力提升与塑造:从自己干到团队干
- 28岁想入行软件测试,可行吗?
热门文章
- python工资这么高为什么不学-为什么Python岗位薪资越来越高
- 零基础学python比较好的网课-请问自学 Python 有必要买课程吗?
- python3.8.5-Python 3.8.5下载
- 免费python自学攻略-Python自学攻略
- python和c先学哪个-初学者python和c语言先学哪个好呢?
- php和python-Python与PHP的一些区别
- 解决从登录页通过this.$router.push跳转首页后 点返回健路由变而页面不变的问题
- python中如何导入数据包_如何在python中发送数据包?
- shell遍历根目录_大厂运维高手如何打造核心竞争力?这些Shell命令合集得知道!...
- 【宽度优先搜索】计蒜客:蒜头君回家(带条件的BFS)