题目描述

输入

输出

样例输入

5

1 4 5 2 3

3 4 2 1 5

样例输出

3

数据范围

样例解释

解法

模型显然。

设第一列为a[],第二列为b[],f[i]为前i个数的最大答案。

顺序枚举a,则f[i]=max(f[k]+1)(b[k]<b[i])。

最长不下降子序列。

代码

#include<iostream>
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<algorithm>
#define ll long long
#define ln(x,y) int(log(x)/log(y))
#define sqr(x) ((x)*(x))
using namespace std;
const char* fin="aP2.in";
const char* fout="aP2.out";
const int inf=0x7fffffff;
const int maxn=100007,maxt=maxn*4;
int n,i,j,k,ans;
int f[maxn],c[maxt];
int tong[maxn];
int a[maxn];
void change(int l,int r,int t,int v,int v1){
int mid=(l+r)/2;
if (l==r){
c[t]=max(c[t],v1);
return;
}
if (v<=mid) change(l,mid,t*2,v,v1);
else change(mid+1,r,t*2+1,v,v1);
c[t]=max(c[t*2],c[t*2+1]);
}
int getmax(int l,int r,int t,int v1,int v2){
int mid=(l+r)/2;
if (l>v2 || r<v1) return 0;
if (l>=v1 && r<=v2) return c[t];
return max(getmax(l,mid,t*2,v1,v2),getmax(mid+1,r,t*2+1,v1,v2));
}
int main(){
scanf("%d",&n);
for (i=1;i<=n;i++) scanf("%d",&j),tong[j]=i;
for (i=1;i<=n;i++) scanf("%d",&j),a[i]=tong[j];
for (i=1;i<=n;i++){
f[i]=getmax(1,n,1,a[i]+1,n)+1;
change(1,n,1,a[i],f[i]);
ans=max(ans,f[i]);
}
printf("%d",ans);
return 0;
}

最新文章

  1. 开源遥感平台opticks插件开发指南
  2. 使用图灵机器人API实现聊天机器人
  3. jq 版的tab切换
  4. 烂泥:vcenter通过模板部署vm
  5. ASP.NET Web API 实现客户端Basic(基本)认证 之简单实现
  6. python继承
  7. IDEA激活服務器
  8. get 与post 的接收传值方式
  9. jquery.layout框架分割线
  10. java递归所有文件
  11. Android ListView滑动底部自动加载更多
  12. winform中的 datagriview 字段自动填充长度
  13. JPA 映射单向多对一的关联关系
  14. Android学习笔记(27):日历视图Calendar
  15. 随机逻辑回归random logistic regression-特征筛选
  16. 浅谈Java语言中ArrayList和HashSet的区别
  17. 阅读ARM Memory(L1/L2/MMU)笔记
  18. 震惊!最全PyCharm教程
  19. json文本和json对象之间的转换
  20. 【err】VIDEOIO ERROR: V4L: index 0 is not correct!Unable to connect to camera

热门文章

  1. css3的3D变形
  2. 洛谷 P3750 [六省联考2017]分手是祝愿
  3. 如何设置td中溢出内容的隐藏显示
  4. springboot核心技术(四)-----Docker、数据访问、自定义starter
  5. Ubuntu连不上网一直提示连接已断开的解决方案
  6. WhaleCTF之web-http呀
  7. python intern(字符串驻留机制)
  8. RabbitMq知识点总结
  9. numpy使用中的疑惑
  10. stream分组