先用线段树预处理出每个数最终的位置.然后用BIT维护最长上升子序列就行了.

用线段树O(nlogn)O(nlogn)O(nlogn)预处理就直接倒着做,每次删去对应位置的数.具体看代码

CODE

#include<bits/stdc++.h>
using namespace std;
char cb[1<<15],*cs=cb,*ct=cb;
#define getc() (cs==ct&&(ct=(cs=cb)+fread(cb,1,1<<15,stdin),cs==ct)?0:*cs++)
template<class T>inline void read(T &res) {
char ch; int flg = 1; while(!isdigit(ch=getc()))if(ch=='-')flg=-flg;
for(res=ch-'0';isdigit(ch=getc());res=res*10+ch-'0'); res*=flg;
}
const int MAXN = 100005;
int n, m, x[MAXN], rk[MAXN], ans, sz[MAXN<<2], T[MAXN];
inline void chkmax(int &x, int y) { if(y > x) x = y; }
inline void upd(int x, int val) { for(; x <= n; x += x&-x) chkmax(T[x], val); }
inline int qsum(int x) { int re = 0; for(; x; x -= x&-x) chkmax(re, T[x]); return re; }
inline void upd(int i) { sz[i] = sz[i<<1] + sz[i<<1|1]; }
void build(int i, int l, int r) {
if(l == r) { sz[i] = 1; return; }
int mid = (l + r) >> 1;
build(i<<1, l, mid);
build(i<<1|1, mid+1, r);
upd(i);
}
int query(int i, int l, int r, int k) {
if(l == r) { sz[i] = 0; return l; }
int mid = (l + r) >> 1, re;
if(k <= sz[i<<1]) re = query(i<<1, l, mid, k);
else re = query(i<<1|1, mid+1, r, k-sz[i<<1]);
upd(i); return re;
}
int main() {
read(n); build(1, 1, n);
for(int i = 1; i <= n; ++i) read(x[i]), ++x[i];
for(int i = n; i >= 1; --i) rk[i] = query(1, 1, n, x[i]); //!
for(int i = 1, f; i <= n; ++i) {
chkmax(ans, f = qsum(rk[i]) + 1);
printf("%d\n", ans);
upd(rk[i], f);
}
}

最新文章

  1. 接触Matlab10年后的一个总结,随时使用Matlab要掌握的一些要点
  2. 2013长沙赛区现场赛 J - Josephina and RPG
  3. asp.net 发布后,遇到的导出excel报错的问题
  4. NSObject的load和initialize方法(转)
  5. OC3_Copy及MultableCopy
  6. JQ跑马灯
  7. OpenID说明
  8. Access获取新插入数据的自增长主键Id
  9. HTTP生命周期
  10. NYOJ 118 路方案(第二小的跨越)
  11. DFS PKU 1562
  12. [注意事项&amp;amp;车轮]java源代码 产生局部javadoc api档
  13. Swiper3 的特色功能
  14. linux dns搭建
  15. 学JAVA第八天,今天用循环做了个好玩的东西
  16. SmartGit/HG
  17. DP专题:划分数问题
  18. RabbitMQ三种Exchange模式(fanout,direct,topic)的性能比较(转)
  19. CRNA的使用
  20. TopCoder SRM624 BuildingHeightEasy 题解

热门文章

  1. 【转帖】比df命令更有用的磁盘信息工具
  2. 【转载】启动redis出现Creating Server TCP listening socket *:6379: bind: No such file or directory
  3. appium-Android_webview页面元素定位遇到的问题
  4. git回退
  5. 【spring Boot】spring boot获取资源文件的三种方式【两种情况下】
  6. pg_ctl — 启动、停止、重启 PostgreSQL
  7. 《深入实践C++模板编程》之二——模板类
  8. python 访问权限
  9. Java学习笔记【十一、序列化】
  10. Kernel boot options