球的序列(formation.*)

 

N个编号为1-n的球,每个球都有唯一的编号。这些球被排成两种序列,分别为A、B序列,现在需要重新寻找一个球的序列l,对于这个子序列l中任意的两个球,要求j,k(j<k),都要求满足lj在A中位置比lk在A中位置靠前,却lj在B中位置比lk在B中位置靠前,请你计算这个子序列l的最大长度。

输入:

第一行一个整数,表示N。

第二行N个整数,表示A序列。

第三行N个整数,表示B序列。

样例输入

5

1 2 4 3 5

5 2 3 4 1

样例输出

2

样例说明

L可以是{2,3},也可以是{2,4}

数据范围:

40% N<=5000

100% N<=50000

/*
  一看题目,没多想就以为是最长公共子序列,无奈n^2做法不给力,40分
  经某大神提醒,不用最长公共子序列,因为第二个数列中的数和第一个中的数一样的,所以先预处理处第二个数列中的数在第一个数列中的位置,然后跑最长上升子序列。
*/
#include<cstdio>
#include<iostream>
#define M 50010
using namespace std;
int a[M],b[M],num[M],c[M],len,n;
int main()
{
    //freopen("jh.in","r",stdin);
    freopen("formation.in","r",stdin);
    freopen("formation.out","w",stdout);
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
      scanf("%d",&a[i]),num[a[i]]=i;
    for(int i=1;i<=n;i++)
    {
        int x;
        scanf("%d",&x);
        b[i]=num[x];
    }
    c[++len]=b[1];
    for(int i=2;i<=n;i++)
    {
        int pos=lower_bound(c+1,c+len+1,b[i])-c;
        if(pos>len)++len;
        c[pos]=b[i];
    }
    printf("%d",len);
    return 0;
}

时间: 2024-10-13 12:08:18

球的序列(formation.*)的相关文章

球的序列

[题目描述] 现有N个球,每个球都有唯一的编号(1 <= 编号 <= N).这些球被排成了两种序列,分别为A.B序列,现在需要重新寻找一个序列C,对于子序列C中任意的两个球Ci和Cj(i < j),满足Cj在A中位置比Ci在A中位置靠前,且Cj在B中位置比Ci在B中位置靠前,请计算这个子序列C的最大长度. [输入描述] 第一行输入一个整数N: 第二行输入N个整数,表示A序列: 第三行输入N个整数,表示B序列. [样例输入] 5 1 2 4 3 5 5 2 3 4 1 [样例输出] 2 [

9.30 noip模拟试题

时限均为1s,内存 256MB 1.某种密码(password.*) 关于某种密码有如下描述:某种密码的原文A是由N个数字组成,而密文B是一个长度为N的01数串,原文和密文的关联在于一个钥匙码KEY.若KEY=∑?[Ai*Bi],则密文就是原文的一组合法密码. 现在有原文和钥匙码,请编一个程序来帮助他统计到底有多少个符合条件的密文. [输入数据] 第一行两个数N,KEY,意义同题目描述: 第二行N个数表示原文A,意义同题目描述. [输出数据] 一个数ANS,表示对于原文A和KEY,有多少组可行的

2014-10-4 NOIP模拟赛

1.某种密码(password.*) 关于某种密码有如下描述:某种密码的原文A是由N个数字组成,而密文B是一个长度为N的01数串,原文和密文的关联在于一个钥匙码KEY.若KEY=∑?[Ai*Bi],则密文就是原文的一组合法密码. 现在有原文和钥匙码,请编一个程序来帮助他统计到底有多少个符合条件的密文. [输入数据] 第一行两个数N,KEY,意义同题目描述: 第二行N个数表示原文A,意义同题目描述. [输出数据] 一个数ANS,表示对于原文A和KEY,有多少组可行的密文B. [输入样例] 3 2

从决策树学习谈到贝叶斯分类算法、EM、HMM

从决策树学习谈到贝叶斯分类算法.EM.HMM 引言 近期在面试中,除了基础 &  算法 & 项目之外,经常被问到或被要求介绍和描写叙述下自己所知道的几种分类或聚类算法(当然,这全然不代表你将来的面试中会遇到此类问题,仅仅是由于我的简历上写了句:熟悉常见的聚类 & 分类算法而已),而我向来恨对一个东西仅仅知其皮毛而不得深入,故写一个有关数据挖掘十大算法的系列文章以作为自己备试之用,甚至以备将来经常回想思考.行文杂乱,但侥幸若能对读者起到一点帮助,则幸甚至哉. 本文借鉴和參考了两本书,

NOIP练习赛题目3

魔兽争霸 难度级别:C: 运行时间限制:1000ms: 运行空间限制:262144KB: 代码长度限制:2000000B 试题描述 小x正在销魂地玩魔兽他正控制着死亡骑士和n个食尸鬼(编号1-n)去打猎死亡骑士有个魔法,叫做“死亡缠绕”,可以给食尸鬼补充HP战斗过程中敌人会对食尸鬼实施攻击,食尸鬼的HP会减少,小x希望随时知道自己部队的情况,即HP值第k多的食尸鬼有多少HP,以便决定如何施放魔法.请同学们帮助他:)小x向你发出3种信号:(下划线在输入数据中表现为空格)A_i_a表示敌军向第i个食

poj 1879 Tempus et mobilius Time and motion

本题链接:点击打开链接 本题大意: 有一计时器,由编号从1到n的球组成,有三个轨道,分别对应1分钟,5分钟,1小时.此三个轨道可认为是栈,每分钟从球堆里出来一个球,球堆可认为是队列,三个轨道的容纳量分别是4,11,11.球首先进入的是1分钟轨道,当第五个球进入时,一分钟轨道的球全部出栈,进入球队列.而第五个球进入5分钟轨道,5分钟轨道满后再进的球进入小时轨道,5分钟轨道的球全部出栈进入球队列.小时轨道满了也是如此.此时经过半天.问:经过多少天球回归到原始状态. 解题思路: 每半天球完成一次序列交

从决策树学习谈到贝叶斯分类算法、EM、HMM --别人的,拷来看看

从决策树学习谈到贝叶斯分类算法.EM.HMM 引言 最近在面试中,除了基础 &  算法 & 项目之外,经常被问到或被要求介绍和描述下自己所知道的几种分类或聚类算法(当然,这完全不代表你将来的面试中会遇到此类问题,只是因为我的简历上写了句:熟悉常见的聚类 & 分类算法而已),而我向来恨对一个东西只知其皮毛而不得深入,故写一个有关数据挖掘十大算法的系列文章以作为自己备试之用,甚至以备将来常常回顾思考.行文杂乱,但侥幸若能对读者起到一点帮助,则幸甚至哉. 本文借鉴和参考了两本书,一本是T

【AtCoder】diverta 2019 Programming Contest

diverta 2019 Programming Contest 因为评测机的缘故--它unrated了.. A - Consecutive Integers #include <bits/stdc++.h> #define fi first #define se second #define pii pair<int,int> #define mp make_pair #define pb push_back #define space putchar(' ') #define

能量球

能量球 (enb.pas/c/cpp) 题目描述 sideman 有着一个你们所不知道的秘密.实际上, sideman不是地球人,而是遥远的Gliese 行星的生物.sideman 虽然身在地球,但是时刻盼望着能够回到Gliese 去.终于有一天, sideman得到了几颗蕴含着无数能量的能量球.经过漫长艰苦的研究, sideman 搞清楚了这些能量球的规律.首先,能量球上面有一个正整数N,运用激发手段可以使得能量球上的正整数变为原来的数的一个真因子( A 是B 的一个真因子,等价于B 是A 的