题意:
有一个起初是空的序列。我们开始在序列中添加从1到N的数字,每次我们只在特定位置向序列添加一个数字。现在,我们想知道每次添加后LIS(最长上升子序列)的长度。
题解:
一个神奇的LIS题,题解见附件

#pragma GCC optimize (4)
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxn=100000+10;
#define min(x,y) ((x)<(y)?(x):(y))
#define max(x,y) ((x)>(y)?(x):(y))
namespace GET{char ch;inline char read(){#define MAX 10000000static char buf[MAX],*s,*t;if(s==t){t=(s=buf)+fread(buf,1,MAX,stdin);if(s==t)return EOF;}return *s++;}// #define getchar readtemplate <typename T>inline void Read(T &x){while(ch<'0'||ch>'9')ch=getchar();x=ch-'0';ch=getchar();while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch^'0');ch=getchar();}}inline void Write(int x){if(x>10)Write(x/10);putchar(x%10+'0');}
}
using namespace GET;
struct Tree{int left,right;int sum;
}a[maxn<<2];
int n,ans;
int A[maxn],Low[maxn],val[maxn];
void Init();
void LIS();
void Pushup(int);
void Build(int,int,int);
void Update(int,int,int);
signed main(){// freopen("in.cpp","r",stdin);
        Init();return 0;
}
void Init(){Read(n);Build(1,1,n);for(int i=1;i<=n;i++)Read(A[i]);for(int i=n;i>=1;i--)Update(1,i,A[i]+1);LIS();
}
void LIS(){Low[1]=val[1];ans=1;//val记录最终的序列printf("%d\n",ans );for(int i=2;i<=n;i++){//接下来的就是二分求LISint x=lower_bound(Low+1,Low+1+ans,val[i])-Low;ans=max(x,ans);Low[x]=val[i];printf("%d\n",ans);}
}
void Pushup(int u){a[u].sum=a[u<<1].sum+a[u<<1|1].sum;
}
void Build(int u,int left,int right){a[u].left=left;a[u].right=right;if(left==right){a[u].sum=1;return;}int mid=(left+right)>>1;Build(u<<1,left,mid);Build(u<<1|1,mid+1,right);Pushup(u);
}
void Update(int u,int key,int p){if(a[u].left==a[u].right){val[key]=a[u].left;a[u].sum=0;return;}a[u].sum--;int mid=(a[u].left+a[u].right)>>1;if(a[u<<1].sum>=p)Update(u<<1,key,p);else Update(u<<1|1,key,p-a[u<<1].sum);
}

转载于:https://www.cnblogs.com/holy-unicorn/p/9510360.html

HDU 3564 Another LIS相关推荐

  1. HDU - 3564 Another LIS(LIS+线段树)

    http://acm.hdu.edu.cn/showproblem.php?pid=3564 题意 给出1~n的插入顺序,要求每次插入之后的LIS 分析 首先用线段树还原出最终序列.因为插入的顺序是按 ...

  2. hdu 3564(线段树+LIS)

    题意:给出1~n的插入顺序,要求每次插入之后的LIS 解题思路:这道题确实挺难想的,我最开始想用树状数组每插入一个数就更新一次,如果这么想,那么你就输了.它这里的想法是先将1-n的最终位置都保存起来, ...

  3. inline-block什么意思中文_block,inline和inline-block概念和区别

    总体概念 block和inline这两个概念是简略的说法,完整确切的说应该是 block-level elements (块级元素) 和 inline elements (内联元素).block元素通 ...

  4. linux判断tomcat状态,LINUX下如何查看tomcat运行状态,判断其是否启动

    1,查看Tomcat启动日志. ${catalina_home}\logs [root@iZ25b4ffkfaZ logs]# tail -f catalina.out Sep 10, 2015 11 ...

  5. hdu 5087(LIS变形)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5087 解题思路:这道题其实仔细想想很简单,次长LIS只有两种可能,一种就是等于LIS-1,一种就是LI ...

  6. 【HDU 4352】 XHXJ's LIS (数位DP+状态压缩+LIS)

    XHXJ's LIS Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  7. HDU 5773 The All-purpose Zero(O(nlgn)求LIS)

    http://acm.hdu.edu.cn/showproblem.php?pid=5773 题意: 求LIS,其中的0可以看做任何数. 思路: 因为0可以看做任何数,所以我们可以先不管0,先求一遍L ...

  8. HDU 4352 XHXJ's LIS(*数位DP 记忆化搜索 待整理)

    XHXJ's LIS HDU - 4352 #define xhxj (Xin Hang senior sister(学姐))  If you do not know xhxj, then caref ...

  9. HDU 4521 小明系列问题——小明序列 LIS+动态规划

    HDU 4521小明系列问题--小明序列 Time Limit:1000MS    Memory Limit:32768KB    64bit IO Format:%I64d & %I64u ...

最新文章

  1. Boost 编译链接
  2. Python学习笔记——常量和变量
  3. java把信息存到文件里,Java 如何将字符串信息直接写保存到文本文件?
  4. python小练习--模拟用户登录,(3次重试机会,登录成功展示登录账号密码)
  5. PAT甲级1016 Phone Bills :[C++题解]字符串处理(复杂题)(C语言格式化读入、输出很便利!!!)
  6. MySQL之INSERT
  7. [2020多校A层11.25]最大K段和(反悔贪心)
  8. 如何避免mysql回表查询_mysql如何避免回表查询
  9. C#LeetCode刷题之#242-有效的字母异位词(Valid Anagram)
  10. STL(六)——max_element和min_element
  11. 机器学习深度学习研究者最重要的11张速查表
  12. vue.js 定义全局组件和局部组件的方法
  13. 路畅安卓最新固件升级_路畅导航系统固件升级下载|路畅导航系统固件升级大全1.51 官方版_ - 极光下载站...
  14. 小技巧(12):关于PC端简单的视频剪辑处理中,bandicam(录制)、pr(配音)、pr(导出)、剪映(字幕识别)、pr(最终版导出)的全过程及基础设置
  15. 基于区块链的数字版权保护介绍
  16. c 语言编写的一元二次方程的根,C#程式求一元二次方程根
  17. 高薪岗位大数据开发工程师要如何入门?【重磅】
  18. matlab取包络取得过细怎么解决,matlab如何求包络线
  19. python numpy 多条件筛选
  20. 第8章.商品详情页面之thymeleaf

热门文章

  1. link标签的几个用法,帮助提高页面性能
  2. BZOJ5419[Noi2018]情报中心——线段树合并+虚树+树形DP
  3. Ansible-playbook 学习
  4. ArcCatalog中将SQLServer中的空间数据导入到Oracle库中
  5. tomcat内存溢出(修改catalina.bat后windows启动tomcat服务没有效果) | 王猛的个人主页...
  6. 用AJAX技术聚合RSS
  7. 不知道能不能赶上用这技术的那一天
  8. 网络管理员&MCSE2003之2:使用虚拟机Vmware建立多电脑网络环境
  9. android 语音搜索动画,Android自定义控件实现UC浏览器语音搜索效果
  10. linux下maxwell安装教程,完美起航-Maxwell采集binlog系列(二)-Linux系统安装MySQL