热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

bzoj4282:慎二的随机数列最长不下降序列

题意给出一个长度为n的序列,有一些位置可以放任意的数,问最长上升序列的长度。n

题意

给出一个长度为n的序列,有一些位置可以放任意的数,问最长上升序列的长度。
n<&#61;100000


分析

dalao们的做法都好劲啊&#xff0c;就我的做法最暴力。。。

考虑用二分求lis做法&#xff0c;用一个f[i]维护长度为i的最长上升序列的结尾的最小值。若当前要处理的位置是有数字的则直接处理&#xff0c;否则设当前的最长上升序列长度为maxlen&#xff0c;则f[i]&#61;f[i-1]&#43;1 (1<&#61;i<&#61;maxlen&#43;1)&#xff0c;那么我们可以考虑用一个变量add表示f数组中的每一个数都被加上了add&#xff0c;然后把整个序列向后移一位即可。我的处理方法是维护一个pos表示f序列的结尾下标&#xff0c;那么开头下标就是pos-maxlen&#43;1了。

一次AC吼爽啊&#xff01;&#xff01;&#xff01;


代码

#include
#include
#include
#include
#include
#define N 200005
#define inf 0x7fffffff
using namespace std;int n,maxlen,add,pos,f[N],a[N];int ef(int x)
{int l&#61;pos-maxlen&#43;1,r&#61;pos;while (l<&#61;r){int mid&#61;(l&#43;r)/2;if (f[mid]&#43;add<x) l&#61;mid&#43;1;else r&#61;mid-1;}return l-1;
}int main()
{scanf("%d",&n);for (int i&#61;1;i<&#61;n;i&#43;&#43;){char ch[2];scanf("%s",ch);if (ch[0]&#61;&#61;&#39;N&#39;) a[i]&#61;inf;else scanf("%d",&a[i]);}pos&#61;n;maxlen&#61;add&#61;0;for (int i&#61;1;i<&#61;n;i&#43;&#43;)if (a[i]&#61;&#61;inf){add&#43;&#43;;maxlen&#43;&#43;;f[pos-maxlen&#43;1]&#61;-inf;}else{int x&#61;ef(a[i]),len&#61;x-pos&#43;maxlen&#43;1;if (len>maxlen){maxlen&#61;len;pos&#43;&#43;;f[pos]&#61;a[i]-add;}else f[x&#43;1]&#61;min(f[x&#43;1],a[i]-add);}printf("%d",maxlen);return 0;
}

推荐阅读
  • [USACO 2006 November Gold] 玉米地Corn Fields
    题目描述  FarmerJohn新买了一块长方形的牧场,这块牧场被划分成M行N列(1<M<12;1<N<12),每一格都是一块正方形的土地。FJ打 ... [详细]
  • 对于输入的每个字符串,查找其中的最大字母,在该字母后面插入字符串“(max)”。Input输入数据包括多个测试实例,每个实例由一行长度 ... [详细]
  • [二分图]JZOJ 4612 游戏
    DescriptionInputOutputSampleInput44#****#****#*xxx#SampleOutput5DataConstraint分析非常眼熟࿰ ... [详细]
  • Educational Codeforces Round 43 (Rated for Div. 2)
    EducationalCodeforcesRound43(RatedforDiv.2)https:codeforces.comcontest976A ... [详细]
  • 水题。。main.cppPATA1121CreatedbyPhoenixon2018224.Copyright©2018年Phoenix.Allrightsreserve ... [详细]
  • 下面是一个用openssl实现获取https网页内容的demo,整个流程比较简单,主要封装的API如下staticinthttps_init(http ... [详细]
  • Ithinkthishasbeenupbefore,butcouldntfindanyanswertoit.Ifitsalreadyansweredplease ... [详细]
  • 问题描述  编写一个程序,输入一个1000以内的正整数,然后把这个整数的每一位数字都分离出来,并逐一地显示。  输入格式:输 ... [详细]
  • 在ROS系统中,参数读写一般通过xml或者yaml格式的文件,其中yaml用得比较多。这是一种可读性高,轻量级的标记语言,简单好用。对于yaml文件,ros中用的较早版本的yaml- ... [详细]
  • 这篇文章将为大家详细讲解有关如何使用C语言strcmp函数,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一 ... [详细]
  • Matlab中利用mex编译Opencv实现画板绘图功能
    图形绘制是标记和可视化数据的重要方法.通过在Matlab中集成画板绘图功能,可为科学计算提供便利.1设置Matlab支持Opencv编译操作系统:麒麟14.04(基于Ubu ... [详细]
  • 使用临时文件tmpnam该函数的功能是产生一个唯一的文件名系统回味该文件分配一块内存来保存临时变量例如下面的代码#includeintmain(){charnam ... [详细]
  • 此题有一个大坑id范围为1e9此题题意是按照同类按照价格大小从大到小输出,如果价格相等再按照id从小到大输出。​#includeusin ... [详细]
  • rbac 4表 常规设计
    rbac4表常规设计设计模型:1、管理员表(users)Schema::create('users',function(Blueprint$table){$tabl ... [详细]
  • 两种不同方式获取最大值与最小值代码1:#include&amp;amp;lt;stdio.h&amp;amp;gt;intmain(){floatscore[5], ... [详细]
author-avatar
用户k3fe6y3kps
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有