令$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. 题解 [HNOI2007]分裂游戏

    题目传送门 题目大意 有趣的取石子游戏即将开始. 有 \(n\) 堆石头,编号为 \(0,1,2,...,n-1\).两个人轮流挑石头. 在每个回合中,每个人选择三堆编号为 \(i,j,k\) 的石头 ...

  2. Win7恢复注册表

    前言 安装仿真实验环境的时候,按照指引把杀软关了,然后出现了"不是有效Win32应用程序"的错误,bd了一下解决方案,爬到了一篇文章:删除注册表中的.exe然后重启,然后,所有的e ...

  3. jsonp和cors解决跨域

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.对于JSON大家应该是很了解了吧,不是很清楚的朋友可以去json.org上了解下,简单易懂. 1.什么是跨 ...

  4. dubbo注册中心占位符无法解析问题(二)

    dubbo注册中心占位符无法解析问题 前面分析了dubbo注册中心占位符无法解析的问题. 并给出了2种解决办法: 降低mybatis-spring的版本至2.0.1及以下 自定义MapperScann ...

  5. Linux搭建SVN服务器详细教程

    前言 本文讲解Linux系统下如何搭建SVN服务器,详细说明各配置项的功能,最终实现可管控多个项目的复杂配置. SVN是subversion的缩写,是一个开放源代码的版本控制系统,通过采用分支管理系统 ...

  6. 5.29日 Scrum Metting

    日期:2021年5月29日 会议主要内容概述:人员调整,xyl同时兼顾前后端:确定表格缩放策略和新图表添加:强调任务分配,总结工作. 一.进度情况## 组员 负责 两日内已完成的工作 后两日计划完成的 ...

  7. BUAA 2020 软件工程 软件分析案例作业

    Author: 17373051 郭骏 项目 内容 这个作业属于哪个课程 2020春季计算机学院软件工程(罗杰 任健) 这个作业的要求在哪里 个人博客作业-软件分析案例 我在这个课程的目标是 学习软件 ...

  8. Noip模拟43 2021.8.18

    T1 地一体 可以树形$dp$,但考场没写出来,只打了没正确性的贪心水了$30$ 然后讲题的时候B哥讲了如何正确的贪心,喜出望外的学习了一下 不难发现 每次士兵都会直接冲到叶子节点 从深的点再返回到另 ...

  9. Python matplotlib pylot和pylab的区别

    matplotlib是Python中强大的绘图库. matplotlib下pyplot和pylab均可以绘图. 具体来说两者的区别 pyplot 方便快速绘制matplotlib通过pyplot模块提 ...

  10. tarjan知识点梳理

    tarjan在图论中还是挺重要的.这里就简要的梳理一下tarjan的知识点. tarjan算法与无向图连通性. 首先说一下图中割点和桥的定义. 桥:也称割边,定义类似,在无向图中,若去掉某条边,导致整 ...