bzoj 3173 最长上升子序列

Written with StackEdit.

Description

给定一个序列,初始为空。现在我们将\(1\)\(N\)的数字插入到序列中,每次将一个数字插入到一个特定的位置。每插入一个数字,我们都想知道此时最长上升子序列长度是多少?

Input

第一行一个整数\(N\),表示我们要将\(1\)\(N\)插入序列中,接下是\(N\)个数字,第\(k\)个数字\(X_k\),表示我们将\(k\)插入到位置\(X_k(0\leq X_k\leq k-1,1\leq k\leq N)\),

Output

\(N\)行,第\(i\)行表示\(i\)插入\(X_i\)位置后序列的最长上升子序列的长度是多少。

Sample Input

3
0 0 2

Sample Output

1
1
2

HINT

\(100\%\)的数据 \(n\leq100000\).

Solution

  • 如果我们已经得到了最后的序列,我们可以用\(O(nlogn)\)的算法计算出\(LIS\),同时维护\(ans[i]\),表示以\(i\)作为结尾的上升子序列的最大长度.
  • 再令\(g[i]\)表示最终要输出的答案,即插入\(i\)后的\(LIS\)长度.
  • 因为整个序列是从小到大插入的,所以\(g[i]=max_{j=1}^{i}ans[j].\)
  • 使用前缀和优化一下即可.
  • 维护元素的插入可以写一颗平衡树.
#include<bits/stdc++.h>
using namespace std;
typedef long long LoveLive;
inline int read()
{int out=0,fh=1;char jp=getchar();while ((jp>'9'||jp<'0')&&jp!='-')jp=getchar();if (jp=='-'){fh=-1;jp=getchar();}while (jp>='0'&&jp<='9'){out=out*10+jp-'0';jp=getchar();}return out*fh;
}
const int MAXN=1e5+10;
int a[MAXN],qlen=0;
int n;
struct FhqTreap
{int x,y;struct node{int lson,rson,siz,weight,key;} treap[MAXN];int idx,root;FhqTreap(){x=0,y=0;idx=0;root=0;treap[0].key=0;treap[0].lson=treap[0].rson=0;treap[0].weight=0;treap[0].siz=0;}#define rt treap[o]#define ls treap[treap[o].lson]#define rs treap[treap[o].rson]inline int newnode(int key){int o=++idx;rt.lson=rt.rson=0;rt.siz=1;rt.weight=rand();rt.key=key;return o;}inline void pushup(int o){rt.siz=ls.siz+rs.siz+1;}int merge(int x,int y){if(!x || !y)return x+y;if(treap[x].weight<treap[y].weight){treap[x].rson=merge(treap[x].rson,y);pushup(x);return x;}else{treap[y].lson=merge(x,treap[y].lson);pushup(y);return y;}}void split(int &x,int &y,int k,int o){if(!o)x=y=0;else{if(k<=ls.siz){y=o;split(x,rt.lson,k,rt.lson);}else{x=o;split(rt.rson,y,k-ls.siz-1,rt.rson);}pushup(o);}}void ins(int key,int pos){split(x,y,pos,root);y=merge(newnode(key),y);root=merge(x,y);}void dfs(int o){if(!o)return;dfs(rt.lson);a[++qlen]=rt.key;dfs(rt.rson);}void getseq(){dfs(root);}
}T;
#define inf 0x7fffffff
int f[MAXN],ans[MAXN];
int main()
{srand(19260817);n=read();for(int i=1;i<=n;++i){int pos=read();T.ins(i,pos);}T.getseq();memset(f,0x7f,sizeof f);f[0]=-inf;for(int i=1;i<=n;++i){int t=upper_bound(f,f+n+1,a[i])-f;f[t]=a[i];ans[a[i]]=t;}for(int i=1;i<=n;++i)printf("%d\n",ans[i]=max(ans[i-1],ans[i]));puts("");return 0;
}

转载于:https://www.cnblogs.com/jklover/p/10163705.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/412563.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java 调用linux 脚本并获取返回值

大家好&#xff0c;我是烤鸭&#xff1a; 今天分享下java 调用 shell脚本 并获取返回值。 代码实践 String cmd "df -h"; StringBuffer sb new StringBuffer(); Process process Runtime.getRuntime().exec(cmd); BufferedReader br new BufferedReader(new In…

[css] 写出主流浏览器内核私有属性的css前缀

[css] 写出主流浏览器内核私有属性的css前缀 完善一下&#xff1a; Chrome&#xff1a;Blink内核 -webkit-Safari&#xff1a;WebKit内核 -webkit-Firefox &#xff1a;Gecko内核 -moz-IE&#xff1a;Trident内核 -ms-Opera&#xff1a;Presto内核 …

补充小知识:文件句柄与文件标识符

#文件句柄 这是操作系统里的一个概念&#xff0c;句柄是WINDOWS用来标识被应用程序所建立或使用的对象的唯一整数&#xff0c;WINDOWS使用各种各样的句柄标识诸如应用程序实例&#xff0c;窗口&#xff0c;控制&#xff0c;位图&#xff0c;GDI对象等等。WINDOWS句柄有点象C语言…

[css] 使用flex实现三栏布局,两边固定,中间自适应

[css] 使用flex实现三栏布局&#xff0c;两边固定&#xff0c;中间自适应 同意里面的一个回答&#xff0c;现在有很多简单的实现方式&#xff0c;传统的这个也是一种hack的方式&#xff0c;真的没必要去追究了&#xff0c;但是核心知识点可以掌握。1.把 center 放在最前面&…

saltstack部署java应用失败无日志——CICD 部署

大家好&#xff0c;我是烤鸭&#xff1a; ​   最近在搞公司的CICD&#xff0c;遇到各种问题。复盘总结一下。 CICD 架构 这篇文章写得很详细&#xff0c;可以看一下 https://linux.cn/article-9926-1.html 而这里只是结合现在的情况分析下&#xff1a; CI 持续集成&…

day15 webUI自动化

一、webdriver的原理 driver webdriver.Chrome()创建浏览器&#xff0c;当做我们的服务端&#xff0c;代码就是客户端&#xff0c;和客户端进行ip绑定&#xff0c;基于http协议发送post请求 WebDriver webdriver是按照server – client的经典设计模式设计的。 webdriver的作用…

[css] 浏览器是怎样判断元素是否和某个CSS选择器匹配?

[css] 浏览器是怎样判断元素是否和某个CSS选择器匹配&#xff1f; 有选择器&#xff1a; div.ready #wrapper > .bg-red 先把所有元素 class 中有 bg-red 的元素拿出来组成一个集合&#xff0c;然后上一层&#xff0c;对每一个集合中的元素&#xff0c;如果元素的 parent i…

idea 插件开发 扫描sqlserver

大家好&#xff0c;我是烤鸭&#xff1a; 最近在搞sqlserver 升级 mysql/tidb&#xff0c;发现代码里的sql有很多地方需要改&#xff0c;想着能不能开发一个省点力。 官方的迁移指南&#xff1a; https://www.mysql.com/why-mysql/white-papers/sql-server-to-mysql-zh/ 方案…

VUE之文字跑马灯效果

1.效果演示 2.相关代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><script src"js/vue-2.4.0.js"></script> </head> <body> <div id&…

[css] 用CSS绘制一个三角形

[css] 用CSS绘制一个三角形 .triangle{width: 0;border-bottom: 35px solid lightgreen;border-left: 35px solid transparent;}wrong.triangle{width: 0;border: 35px solid transparent;border-bottom: 35px solid lightgreen; }个人简介 我是歌谣&#xff0c;欢迎和大家一起…

计算机从加电到系统(Linux)启动完成

0x0 背景 在我参加的面试和我面试别人、或者参加别人对别人的面试的事后经常遇到的一个问题就是&#xff1a;请从计算机加电开始描述一下计算机启动到操作系统正式启动起来的全过程。这是一个考验对计算机体系结构和基本知识了解程度的问题。今天也就特别针对这个问题做一个回答…

《少有人走的路——心智成熟的旅程》读书笔记

大家好&#xff0c;我是烤鸭&#xff1a; 《少有人走的路——心智成熟的旅程》&#xff0c;读书笔记。 第一部分 自律 规避问题和逃避痛苦的趋向&#xff0c;是人类心理疾病的根源。(正视自己是最重要的) 自律可以消除人的痛苦&#xff1a;延迟满足、承担责任、尊重事实…

[css] 说下line-height三种赋值方式有何区别?

[css] 说下line-height三种赋值方式有何区别&#xff1f; line-height 可以有带单位及不带单位的写法&#xff08;感觉其实是两种&#xff09;。div{line-height: 24px;line-height: 1.5;line-height: 1.5em;line-height: 150%; }对于应用在单个元素上&#xff0c;这几种写法的…

MySQL数据库select语句的使用方法

select语句可 以用回车分隔$sql"select * from article where id1"和 $sql"select * from article where id1" 都可以得到正确的结果&#xff0c;但有时分开写或许能 更明了一点&#xff0c;特别是当sql语句比较长时。批量查询数据可以用in 来实现 $sql&…

PMP 错题记录

PMP 错题记录 大家好&#xff0c;我是烤鸭&#xff1a; 这次的PMP错题集本来想考前发&#xff0c;临时能看看&#xff0c;还是耽搁了&#xff0c;补发一下吧&#xff0c;不知道以后用不用的上&#xff0c;据说改版了&#xff0c;可能也用不上了。 变更题错题记录 9、一项…

[css] 让网页的字体变得清晰,变细用CSS怎么做?

[css] 让网页的字体变得清晰&#xff0c;变细用CSS怎么做&#xff1f; 全家桶&#xff1a;-webkit-font-smoothing: antialiased -moz-osx-font-smoothing: grayscale text-shadow: 1px 1px 1px 1px rgba(0,0,0,0.005) text-rendering: optimizeLegibility个人简介 我是歌谣&…

skywalking oap-server 域名配置

大家好&#xff0c;我是烤鸭&#xff1a; ​ ​ ​ ​ 由于skywalking 的 -Dskywalking.collector.backend_service 的后端服务过多&#xff0c;想通过配置域名的方式简化上报端agent配置&#xff0c;也更灵活。 报错了&#xff0c;先看代码 报错信息&#xff1a; org.apac…

[css] 描述下你所了解的图片格式及使用场景

[css] 描述下你所了解的图片格式及使用场景 通常网页在显示的图片&#xff08;图形&#xff09;的时候&#xff0c;有以下几种格式&#xff1a;GIF、PNG、JPG、SVG&#xff0c;还有个比较新的WebP格式。▍GIF优点&#xff1a;GIF是动态的&#xff1b;支持无损耗压缩和透明度。…

【P1063】 能量项链

之前一直在luogu博客上 2018年12月25日17:15:52 copy到博客园 P1063 能量项链 简单的区间dp 通过解决小区间来影响大区间 环形问题 存储的时候存两边 变成 2*N 个元素 code: for(int i1;i<n;i) {cin>>e[i];e[in]e[i]; }s[i][j] ------- i到j的最大能量 k --------…

nginx 配置 http/2(h2) 和 http 在同一端口的问题

nginx 配置 http/2(h2) 和 http 在同一端口的问题 大家好&#xff0c;我是烤鸭&#xff1a; ​ 这个完全是个采坑记录了。 场景说明 由于这边有个需求想加个支持 grpc 方式转发的域名。 正常的二级域名都是映射到80端口&#xff0c;所以也没想太多&#xff0c;按照这个…