BZOJ3173 [TJOI2013]最长上升子序列
题面:
3173: [Tjoi2013]最长上升子序列
Time Limit: 10 Sec Memory Limit: 128 MB
Submit: 2108 Solved: 1067
[Submit][Status][Discuss]
Description
Input
Output
Sample Input
0 0 2
Sample Output
1
2
HINT
100%的数据 n<=100000
既然插入的数从小到大,我们就可以搞出最终的序列求LIS。
ans[i]=max{f[j],(1<=j<=i)},f[i]表示插入i后以i为结尾LIS长度。
只要求出最终序列问题就解决了。
可以用平衡树(Treap或Splay)
但是转化为前缀k小后就可以用树状数组求辣!(树状数组求k小值?)
![](/assets/blank.gif)
![](/assets/blank.gif)
1 #include <iostream> 2 #include <stdio.h> 3 #include <string.h> 4 #include <algorithm> 5 #include <math.h> 6 using namespace std; 7 #define maxn 100001 8 #define lowbit(x) (x&(-x)) 9 template<typename __> 10 inline void read(__ &s) 11 { 12 char ch; 13 for(ch=getchar(),s=0;ch<'0'||ch>'9';ch=getchar()); 14 for(;ch>='0'&&ch<='9';s=s*10+ch-'0',ch=getchar()); 15 } 16 int n; 17 class fenwick 18 { 19 public: 20 int c[maxn]; 21 void update_sum(int x,int val) 22 { 23 for(;x<=n;x+=lowbit(x)) 24 c[x]+=val; 25 } 26 void update_max(int x,int val) 27 { 28 for(;x<=n;x+=lowbit(x)) 29 c[x]=max(c[x],val); 30 } 31 int query_kth(int k) 32 { 33 int cnt=0,ans=0; 34 for(int i=17;i>=0;i--) 35 { 36 ans+=(1<<i); 37 if(ans>=n||cnt+c[ans]>=k) 38 ans-=(1<<i); 39 else 40 cnt+=c[ans]; 41 } 42 return ans+1; 43 } 44 int query_max(int x) 45 { 46 int ans=0; 47 for(;x;x-=lowbit(x)) 48 ans=max(ans,c[x]); 49 return ans; 50 } 51 }T; 52 int QWQ[maxn],QAQ[maxn],f[maxn]; 53 int main() 54 { 55 read(n); 56 for(int i=1;i<=n;i++) 57 { 58 read(QWQ[i]); 59 ++T.c[i]; 60 if((i+lowbit(i))<=n) 61 T.c[i+lowbit(i)]+=T.c[i]; 62 } 63 int tmp; 64 for(int i=n;i>=1;i--) 65 { 66 QAQ[tmp=T.query_kth(QWQ[i]+1)]=i; 67 T.update_sum(tmp,-1); 68 } 69 memset(T.c,0,sizeof(T.c)); 70 for(int i=1;i<=n;i++) 71 { 72 f[QAQ[i]]=T.query_max(QAQ[i])+1; 73 T.update_max(QAQ[i],f[QAQ[i]]); 74 } 75 for(int i=1;i<=n;i++) 76 printf("%d\n",f[i]<f[i-1]?(f[i]=f[i-1]):f[i]); 77 }
BZOJ 3173
转载于:https://www.cnblogs.com/radioteletscope/p/7762177.html
BZOJ3173 [TJOI2013]最长上升子序列相关推荐
- [BZOJ3173][Tjoi2013]最长上升子序列
[BZOJ3173][Tjoi2013]最长上升子序列 试题描述 给定一个序列,初始为空.现在我们将1到N的数字插入到序列中,每次将一个数字插入到一个特定的位置.每插入一个数字,我们都想知道此时最长上 ...
- BZOJ3173:[TJOI2013]最长上升子序列(Splay)
Description 给定一个序列,初始为空.现在我们将1到N的数字插入到序列中,每次将一个数字插入到一个特定的位置.每插入一个数字,我们都想知道此时最长上升子序列长度是多少? Input 第一行一 ...
- bzoj3173: [Tjoi2013]最长上升子序列(fhqtreap)
这题用fhqtreap可以在线. fhqtreap上维护以i结尾的最长上升子序列,数字按从小到大加入, 因为前面的数与新加入的数无关, 后面的数比新加入的数小, 所以新加入的数对原序列其他数的值没有影 ...
- [TJOI2013]最长上升子序列
[TJOI2013]最长上升子序列 题目大意: 给定一个序列,初始为空.将\(1\sim n(n\le10^5)\)的数字插入到序列中,每次将一个数字插入到一个特定的位置.每插入一个数字后输出LIS长 ...
- BZOJ 3173: [Tjoi2013]最长上升子序列
3173: [Tjoi2013]最长上升子序列 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 1524 Solved: 797 [Submit][ ...
- [BZOJ]3173: [Tjoi2013]最长上升子序列
题解: 考虑按照元素升序加入 所以对位置在其后的元素LIS无影响 然后从前面位置的最大值转移过来就行 ,,,,平衡树无脑模拟 #include <algorithm> #includ ...
- P4309 [TJOI2013]最长上升子序列 平衡树 + dp
传送门 文章目录 题意: 思路: 题意: 思路: 注意到一个很关键的条件,每次插入iii,而iii是递增的,也就是说插入iii之后只会从前面的最大值转移过来,所以我们现在只需要维护插入操作即可,这个显 ...
- bzoj 3173: [Tjoi2013]最长上升子序列(离线二分+树状数组)
3173: [Tjoi2013]最长上升子序列 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 2051 Solved: 1041 [Submit] ...
- 【bzoj 3173】[Tjoi2013]最长上升子序列
Description 给定一个序列,初始为空.现在我们将1到N的数字插入到序列中,每次将一个数字插入到一个特定的位置.每插入一个数字,我们都想知道此时最长上升子序列长度是多少? Input 第一行一 ...
最新文章
- chrome Native Client 让你可以使用 C 以及 C++ 语言开发 Web 应用
- 从本地上传项目到 github 以及从github 下载项目到本地环境
- SpringCloud动态获取yml文件里面的自定义配置
- 利用go语言创建web server的两种方式
- step1 . day4 C语言基础练习之日历
- 2021计算机应用基础统考,2021年度计算机应用基础统考练习题及答案.doc
- java jvm内存地址_JVM--Java内存区域
- 集成学习——XGBoost原理理解
- sql server序列_SQL Server中的序列对象功能
- 《HTML5+JavaScript动画基础》——2.4 JavaScript对象
- 悟空学Linux专栏----第3篇
- [JSOI2012]玄武密码 题解(AC自动机)
- python安卓手机编程入门自学_编程入门学习路线(附教程推荐)
- window java 一键启动部署 mysql,jar
- 电脑如何截长图?如何用电脑截取长图——规划全景
- 總結——關於2017 10 30測試的分析總結
- 《歌手》2019歌王之战红毯众星云集 总决赛选曲透玄机
- 作为一名程序员,你觉得最重要的能力是什么?
- mysql计算两个月份之间的差值_MySQL计算两个日期相差的天数、月数、年数
- 飞翔的小鸟1.0 JAVA
热门文章
- 多客服功能终于也向所有微信认证的订阅号开放了
- BDB (Berkeley DB)数据库简单介绍(转载)
- cufon,在网页上画出特殊字体
- linux 双网卡绑定(bonding)实现负载均衡或故障转移
- 公司要禁止QQ?【我们从协议开始分析】
- argsort获得排序后的下标
- kafka报错与调试技巧
- Flink1.12 standalone-HA配置(转载+自己验证)
- 0009:err:listview:LISTVIEW_WindowProc unknown msg 108c问题解决
- 图解比较李航书上的viterbi算法和dijistra算法