3173: [Tjoi2013]最长上升子序列

Time Limit: 10 Sec  Memory Limit: 128 MB
Submit: 2253  Solved: 1136
[Submit][Status][Discuss]

Description

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

Input

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

Output

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

Sample Input

3
0 0 2

Sample Output

1
1
2

HINT

100%的数据 n<=100000

用平衡树构造序列后,对整个序列求一个lis 
设f[i]表示i结尾的lis 可以确定这样的lis一定是插入i后的答案(因为之前的都比i小)
输出答案的时候取前缀max

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#define ll long long
#define N 100050
using namespace std;
int n,rt,cnt,num,a[N],b[N],ans[N],ls[N],siz[N],rd[N],rs[N];
void update(int u){siz[u]=siz[ls[u]]+siz[rs[u]]+1;}
void lturn(int &u){
int t=rs[u];rs[u]=ls[t];ls[t]=u;
update(u);update(t);u=t;
}
void rturn(int &u){
int t=ls[u];ls[u]=rs[t];rs[t]=u;
update(u);update(t);u=t;
}
void insert(int &u,int k){
if(!u){
u=++cnt;siz[u]=1;
rd[u]=rand();
return;
}
siz[u]++;
if(siz[ls[u]]<k){
insert(rs[u],k-siz[ls[u]]-1);
if(rd[rs[u]]<rd[u])lturn(u);
}
else{
insert(ls[u],k);
if(rd[ls[u]]<rd[u])rturn(u);
}
}
void dfs(int x){
if(!x)return;
dfs(ls[x]);
a[++num]=x;
dfs(rs[x]);
}
void solve(){
int tot=0;
memset(b,0x3f,sizeof(b));
for(int i=1;i<=n;i++){
int p=lower_bound(b+1,b+1+n,a[i])-b;
if(p>tot){
b[++tot]=a[i];
ans[a[i]]=tot;
}
else{
ans[a[i]]=p;
b[p]=a[i];
}
}
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
int p;
scanf("%d",&p);
insert(rt,p);
}
dfs(rt);solve();
//for(int i=1;i<=n;i++)printf("%d ",a[i]);
for(int i=1;i<=n;i++){
ans[i]=max(ans[i],ans[i-1]);
printf("%d\n",ans[i]);
}
return 0;
}

最新文章

  1. jquery右键菜单
  2. jQ获取浏览器window的高宽
  3. Python学习笔记——基本语法
  4. Durid(一): 原理架构
  5. Solr(5.1.0) 与Tomcat 从0开始安装与配置
  6. 正确统计SQLServer的慢日志
  7. HTML笔记(二) 在HTML中使用CSS
  8. jps用法
  9. MYSQL插入处理重复键值的几种方法
  10. Java压缩技术的学习
  11. 练习:一只豆瓣电影TOP250的爬虫
  12. Web Api Self-Host
  13. 如何开发一款html5(H5)跨平台 k12动画/交互课件/游戏
  14. 码农眼中的数学之~矩阵专栏(附Numpy讲解)
  15. css3实现不同的loading
  16. springmvc简单集成shiro
  17. 14:super关键字
  18. 解决IE6下浮层遮盖select刺穿的问题
  19. PhoneGap+Cordova+SenchaTouch-01-环境搭建
  20. 新学dfs(看懂了)

热门文章

  1. 《招一个靠谱的移动开发》iOS面试题及详解(下篇)
  2. Django 分类标签查找
  3. Centos6.7下面配置vim及其插件
  4. DNS搜索过程
  5. 移动端H5活动页优化方案
  6. Spring源码情操陶冶#task:scheduled-tasks解析器
  7. 使用pie.htc时Border-radius的兼容
  8. 如何深入系统的学习一门编程语言——python自学笔记
  9. 基于python的统计公报关键数据爬取 update
  10. 移动端登录页面input获取焦点后页面布局及输入框上移的问题