HDU5489 LIS变形
2015-11-10 12:42
197 查看
Removed Interval
Problem DescriptionGiven a sequence of numbers A=a
///1085422276 #include<bits/stdc++.h> using namespace std; //#pragma comment(linker, "/STACK:102400000,102400000") using namespace std ; typedef long long ll; #define mem(a) memset(a,0,sizeof(a)) #define pb push_back inline ll read() { ll x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){ if(ch=='-')f=-1;ch=getchar(); } while(ch>='0'&&ch<='9'){ x=x*10+ch-'0';ch=getchar(); }return x*f; } //**************************************** const int N=100000+50; #define mod 1000000007 #define inf 1000000007 int b ,a ,dp ,l ,r ,n,L; int main() { int T=read();int oo=1; while(T--) { mem(a),mem(b); scanf("%d%d",&n,&L); for(int i=1;i<=n;i++) { scanf("%d",&a[i]); }a[++n]=inf; for(int i=1;i<=n;i++) { b[n-i+1]=-a[i]; } fill(dp+1,dp+n+1,inf+2); for(int i=L+1;i<=n;i++) { int tmp=lower_bound(dp+1,dp+n+1,a[i])-dp; l[i]=tmp; tmp=lower_bound(dp+1,dp+n+1,a[i-L])-dp; dp[tmp]=a[i-L]; } fill(dp+1,dp+n+1,inf); for(int i=1;i<=n;i++) { int tmp=lower_bound(dp+1,dp+n+1,b[i])-dp; r[n-i+1]=tmp; dp[tmp]=b[i]; } //for(int i=1;i<=n;i++)cout<< l[i]<<" "; //cout<<endl; //for(int i=1;i<=n;i++)cout<< r[i]<<" "; int ans=0; for(int i=L+1;i<=n;i++) { ans=max(ans,l[i]+r[i]-2); } printf("Case #%d: ",oo++); cout<<ans<<endl; } return 0; }
代码
相关文章推荐
- 数组之冒泡排序法--从小到大
- 【学神】1-2Linux基本文件管理
- UIScrollView滚动视图属性及方法介绍
- long 与byte类型间相互转换
- 第十五天
- (NO.00003)iOS游戏简单的机器人投射游戏成形记(四)
- (NO.00003)iOS游戏简单的机器人投射游戏成形记(四)
- (NO.00003)iOS游戏简单的机器人投射游戏成形记(四)
- ULK --- Chap3 Processes: Handling Wait Queues
- 9.6 列表框类
- 集合对象的内存管理、copy概念
- 如何在cocos2dx中使用Lua创建自定义
- 安装linux系统后修改默认开机启动项
- 用nodejs做一个svn密码修改页面
- jdk6版本下载地址
- Linq基础(一)
- 数据库性能优化三:程序操作优化
- 关于编程
- 延续性动词与非延续性动词及其转换
- Nutch 学习笔记2 - 查看抓取的文件