zoukankan      html  css  js  c++  java
  • 【嘤嘤嘤组一试】艾瑞莉娅

    艾瑞莉娅


    【题目描述】

    蒟蒻的danny是我的队友,很爱玩刀妹,这一天发现对方也有个刀妹,同在上路对线。

    刀妹有个技能,可以在突进捅死小兵的时候继续继续往下突进(吼吼),在她们对线的时候,我方凯隐在暗中观察,发现敌我刀妹的突进路线可能会重复(假装小兵被捅死了后还可能会被另一个刀妹捅)。

    我方凯隐想知道有哪几个小兵是死了两次的,也想知道两个刀妹捅死了两次的小兵的顺序。

    【思路】

    咳咳,本人出的题,原博客地址:https://www.cnblogs.com/614685877--aakennes/p/12663440.html

    我觉得应该没有写不出来的组吧,没有吧,没有吧(感觉用这种语气十分智障)

    【代码】

    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    #include<cmath>
    #include<map>//map的库,当然可以不用map直接用数组对应 
    using namespace std;
    const int maxn=2005+5,maxe=2005+5,INF=0x3f3f3f3f;
    int n,m,t,p,q,f[maxe],a[maxn],b[maxn],low[maxn];
    inline int read(){
       int s=0,w=1;
       char ch=getchar();
       while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}
       while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar();
       return s*w;
    }//朴素快读 
    int main(){
    	freopen("a.in","r",stdin);
    	n=read();
    	p=read();
    	q=read();
    	int maxmax=0;
    	map<int,int> mp;
    	for(register int i=1;i<=p-1;i++)a[i]=read(),mp[a[i]]=i;
    	int len=0;//这里对第一组序列进行对应, 
    	for(register int i=1;i<=q-1;i++){
    		b[++len]=read();//如果第二组序列中出现了前一组序列的数的位置就加到数组里 
    		if(mp.find(b[len])==mp.end())len--;//没有就删除 
    		else b[len]=mp[b[len]];
    	}
    	//for(int i=1;i<=len;i++)cout<<b[i]<<" ";
    	int len1=1;
    	low[1]=b[1];
    	for(register int i=2;i<=len;i++){
    		if(low[len1]<b[i])low[++len1]=b[i];
    		else low[lower_bound(low+1,low+len1+1,b[i])-low]=b[i];
    	}//找一下新序列中最长上升子序列就是结果,想成友好城市也行 	
    	printf("%d
    ",len1);
    }
    
  • 相关阅读:
    linux学习笔记-11.正则表达式
    linux学习笔记-10.解压与压缩
    linux学习笔记-9.查找
    linux学习笔记-8.vim
    linux学习笔记-7.文件属性
    linux学习笔记-6.权限
    linux学习笔记-5.用户和组
    @Param注解的用法解析
    linux学习笔记-4.系统命令
    linux学习笔记-3.文件相关命令
  • 原文地址:https://www.cnblogs.com/614685877--aakennes/p/12902310.html
Copyright © 2011-2022 走看看