hdu4521小明系列问题——小明序列【最长上升子序列,间隔】
来源:互联网 发布:怎么判断封包数据 编辑:程序博客网 时间:2024/05/16 23:45
这个题比原始的最长上升子序列就多了一个间隔的最小限制,也是在这里卡了将近一上午才发现自己又读错题了啊啊啊题里的间隔明明是针对下标来说的,我偏偏以为是针对数值来说的,中文题还能读错→_→
这个题考验了一下对于LIS三个数组的理解,裸的LIS忽略掉了表示长度的中间数组,因为只出现在d[]数组的下标里,而且我们二分找到的就直接可以放进去。这个题不一样,它要求下标的差值大于它给的数@。@,所以我们需要单独记录那个中间数组
/************hdu39982016.2.100MS1600K1064 BG++************/#include <iostream>#include<cstdio>#include<cstring>using namespace std;int a[22222],f[22222],d[22222],n,len,num;bool mark[22222];int find(int x,int len){ int mid,left=1,right=len; while(left<=right) { mid=(left+right)>>1; if(d[mid]==x) return mid; else if(d[mid]<x) left=mid+1; else right=mid-1; } return left;}int solve(){ int i=1; while(mark[i]&&i<=n) {i++;} if(i>n) return 0; d[len=1]=a[i]; mark[i++]=1; for(;i<=n;i++) { if(mark[i]) continue; if(a[i]>d[len]) d[++len]=a[i],mark[i]=1; else d[find(a[i],len)]=a[i]; } return len;}int main(){ // freopen("cin.txt","r",stdin); while(~scanf("%d",&n)) { for(int i=1;i<=n;i++) scanf("%d",&a[i]); memset(mark,0,sizeof(mark)); int tmp=solve(); num=1; while(solve()==tmp) num++; printf("%d\n%d\n",tmp,num); } return 0;}
0 0
- hdu4521小明系列问题——小明序列【最长上升子序列,间隔】
- hdu4521 小明系列问题——小明序列 线段树 间隔大于d的最长上升子序列
- hdu4521 小明系列问题——小明序列
- hdu4521小明系列问题——小明序列
- HDU4521:小明系列问题——小明序列
- hdu4521——最长上升子序列
- hdu4521小明系列问题——小明序列 (线段树+dp,求出不连续的最长升序子序列)
- 小明系列问题——小明序列 (线段树优化的最长上升子序列)
- HDU4521:小明系列问题——小明序列(LIS加强版)
- HDU4521:小明系列问题——小明序列(推广LIS(带区间))
- hdu4521 小明系列问题——小明序列(线段树做法)
- hdu4521 小明系列问题——小明序列(条件LIS)
- hdu4521 小明系列问题——小明序列(线段树)
- HDU4521 小明系列问题——小明序列 (LIS)
- hdu4521 小明系列问题——小明序列(线段树+dp)
- hdu 4521 小明系列问题——小明序列(求间距大于d的最长上升序列)
- hdu4521 小明系列问题——小明序列(LIS变种 (线段树+单点更新解法))
- 小明の魔法计划——最长上升子序列
- LeetCode 237. Delete Node in a Linked List
- 关于AlertDialog.Builder的传参
- 多线程网络总结
- Linux的用户和群组
- 百度云管家 提取下载链接
- hdu4521小明系列问题——小明序列【最长上升子序列,间隔】
- 说说Android的MVP模式
- LeetCode 283. Move Zeroes
- UVA 11374 - Airport Express(最短路)
- 一些软件的设计原则
- POJ 3684_Physics Experiment
- 杭电1495 非常可乐(bfs)
- 队列的基本操作
- 使用Eclipse基于Maven使用Java开发WordCount程序项目