令$f[i][j]$表示前i个数的后j位能否匹配b的前j位,有转移$f[i][j]=f[i-1][j-1] \ \&\  [b_{j}\le a_{i}]$
将$g[i][j]=[b_{j}\le a_{i}]$看成一个i为位数的二进制数,即$g[i]=\sum_{j=1}^{m}[b_{j}\le a_{i}]\cdot 2^{j}$,$f[i]$同理,那么就有$f[i]=f[i-1]\ \&\ g[i]$
考虑对于$g$预处理,由于这个值仅和最小的大于$a_{i}$的$b_{j}$有关,因此将b排序后求出每一个$b_{i}$所对应的g,在其中二分即可求出$a_{i}$所对应的g
但这样的空间复杂度打到了$o(\frac{m(2n+m)}{8})$,考虑将f滚动、求g的二分放到f转移时进行,空间降为$o(\frac{m^{2}}{8})$,可以通过

 1 #include<bits/stdc++.h>
2 using namespace std;
3 #define N 150005
4 struct ji{
5 int k,id;
6 bool operator < (const ji &a)const{
7 return (k<a.k)||(k==a.k)&&(id<a.id);
8 }
9 }a[N];
10 int n,m,ans,b[N];
11 bitset<40005>o,s,g[40005];
12 void write(bitset<40005> o){
13 for(int i=1;i<=m;i++){
14 int x=o[i];
15 printf("%d ",x);
16 }
17 printf("\n");
18 }
19 int main(){
20 scanf("%d%d",&n,&m);
21 for(int i=1;i<=n;i++)scanf("%d",&b[i]);
22 for(int i=1;i<=m;i++){
23 scanf("%d",&a[i].k);
24 a[i].id=i;
25 }
26 sort(a+1,a+m+1);
27 g[1][0]=1;
28 for(int i=1,j=1;i<=m;i=j){
29 while (a[i].k==a[j].k)j++;
30 g[j]=g[i];
31 for(int k=i;k<j;k++)g[j][a[k].id]=1;
32 }
33 o[0]=s[0]=1;
34 for(int i=1;i<=n;i++){
35 s=(((s<<1)|o)&g[upper_bound(a+1,a+m+1,ji{b[i],m+1})-a]);
36 if (s[m]==1)ans++;
37 }
38 printf("%d",ans);
39 }

[nowcoder5667G]Greater and Greater的更多相关文章

  1. 2020牛客暑假多校训练营 第二场 G Greater and Greater bitset

    LINK:Greater and Greater 确实没能想到做法. 考虑利用bitset解决问题. 做法是:逐位判断每一位是否合法 第一位 就是 bitset上所有大于\(b_1\)的位置 置为1. ...

  2. Go 语言的基本数据类型

    Go 语言的基本数据类型 0)变量声明 var 变量名字 类型 = 表达式 例: 其中“类型”或“= 表达式”两个部分可以省略其中的一个. 1)根据初始化表达式来推导类型信息 2)默认值初始化为0. ...

  3. C++程序设计——知识点总结

    C++程序设计课程的总结,方便以后快速查阅和复习 Week 2 从C走进C++ 函数指针 函数名是函数的入口地址,指向函数的指针称为"函数指针". 比如,qsort库函数: voi ...

  4. 3.OGG函数

    1.COMPUTE     一般用来计算目标端和源段的字段值,使用这个函数计算出目标端对应列想要的值 Use the @COMPUTE function to return the value of ...

  5. Matlab编程基础

    平台:Win7 64 bit,Matlab R2014a(8.3) “Matlab”是“Matrix Laboratory” 的缩写,中文“矩阵实验室”,是强大的数学工具.本文侧重于Matlab的编程 ...

  6. 搜索表头的例子-jqueryEasyUi

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  7. Robot Framework--09 分支与循环的用法

    转自:http://blog.csdn.net/tulituqi/article/details/8038923 一.分支 在Robotframework2.7.4之前的版本,我们要想写IF比较容易, ...

  8. 第23章 排序算法(包括merge等)

      第23章 排序算法  Sorting:1 sort Sort elements in range (function template)2 stable_sort Sort elements pr ...

  9. [转]PDF预览插件PDFObject.js

    本文转自:http://pdfobject.com/index.php When possible, use standardized HTML markup and avoid JavaScript ...

随机推荐

  1. oracle扩展表空间

    1.  查看表空间的名字及文件所在的位置 select tablespace_name, file_id, file_name, round(bytes / (1024 * 1024), 0) tot ...

  2. Unity——资源文件夹介绍

    Unity资源文件夹介绍 1.编辑时 在Asset文件下存在Resources和SteamingAsset文件夹: Resources 只读不可修改,打包时直接写死,没有办法通过热更新替换资源: 可以 ...

  3. visualbox安装ubuntu18过程中不能输入name,password,密码,姓名问题的解决办法+一些基本操作

    ​ 问题描述:visualbox安装ubuntu18,,,,卡在注册处,无法输入姓名,密码-点击无法输入............如下图: ​ 解决办法:更改你的Ubuntu的主板内存,主板内存默认的值 ...

  4. 洛谷4234最小差值生成树 (LCT维护生成树)

    这也是一道LCT维护生成树的题. 那么我们还是按照套路,先对边进行排序,然后顺次加入. 不过和别的题有所不同的是: 在本题中,我们需要保证LCT中正好有\(n-1\)条边的时候,才能更新\(ans\) ...

  5. [kuangbin带你飞]专题一 简单搜索 棋盘问题

    题来:链接https://vjudge.net/problem/OpenJ_Bailian-132 J - 棋盘问题 1.题目: 在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别. ...

  6. (课内)信安数基RSA-level1&&2

    注:(不求甚解的)攻击原理 以及(浅层的)算法解释已在图片中给出:文字部分主要讲一些python语法的东西. 代码需要库 gmpy2和libnum:加密算法还需要Crypto.Util.number ...

  7. [对对子队]会议记录5.16(Scrum Meeting3)

    今天已完成的工作 何瑞 ​ 工作内容:搭建关卡5.6,优化之前的成本系统 ​ 相关issue:搭建关卡4.5.6 ​ 相关签入:feat: 第五第六关搭建完成 吴昭邦 ​ 工作内容:搭建关卡5.6 ​ ...

  8. android tcp通讯

    Andoird TCP通讯 前言 最近在写一个即时通讯的项目,有一些心得,写出来给大家分享指正一下. 简单描述一下这个项目: 实时查询车辆运行状态的项目,走TCP通迅. 接口采用GZIP压缩. 后台是 ...

  9. 万维网www与HTTP协议

    文章转自:https://blog.csdn.net/weixin_43914604/article/details/105901440 学习课程:<2019王道考研计算机网络> 学习目的 ...

  10. Netty:Netty的介绍以及它的核心组件(一)—— Channel

    1. Netty 介绍 Netty 是一个无阻塞的输入/输出(NIO)框架,它使开发低级网络服务器和客户端变得相对简单.Netty为需要在套接字级别上工作的开发人员提供了令人难以置信的强大功能,例如, ...