2015-10-06 21:49:54


这题说的是个给了一个数组,然后删除任意起点的一个连续的L个数,然后求最长递增子序列《是递增,不是非递减》,用一个树状数组维护一下就ok了

#include <iostream>
#include <algorithm>
#include <string.h>
#include <cstdio>
#include <cmath>
using namespace std;
const int maxn=;
int A[maxn],B[maxn];
int dp[maxn][];
int NUM[maxn][],N;
int lowbit(int x)
{
return x&(-x);
}
void add(int loc, int v,int op)
{
while(loc<=N)
{
NUM[loc][op]=max(v,NUM[loc][op]);
loc+=lowbit(loc);
}
}
int sum(int loc, int op)
{
int ans=;
while(loc>)
{
ans=max(ans,NUM[loc][op]);
loc-=lowbit(loc);
}
return ans;
}
int main()
{
int cas;
scanf("%d",&cas);
for(int cc=; cc<=cas; cc++)
{
int n,L;
scanf("%d%d",&n,&L); int id=;
for(int i=; i<n; i++)
{
scanf("%d",&A[i]);
B[i]=A[i];
if(A[i]<A[id])id=i;
}
if(L==n){
printf("Case #%d: %d\n",cc,);continue;
}
B[n]=A[id]-;
sort(B,B+(n+));
N=unique(B,B+(n+))-B;
memset(NUM,,sizeof(NUM));
for(int i=; i<n; i++){
A[i]=lower_bound(B,B+N,A[i])-B+;
}
int ans=;
for(int i=; i<n; i++)
{
dp[i][]=dp[i][]=;
int Loc=A[i];
int AA=sum(Loc-,);
dp[i][]=AA+;
AA=sum(Loc-,);
dp[i][]=max(dp[i][],AA+);
if(n-L>i){
dp[i][]=sum(Loc-,)+;
}
if(i-L>=){
add(A[i-L],dp[i-L][],);
}
if(i>=L){
add(A[i],dp[i][],);
}
if(n-L>i){
add(A[i],dp[i][],);
}
ans=max(max(dp[i][],dp[i][]),ans);
}
printf("Case #%d: %d\n",cc,ans);
}
return ;
}

最新文章

  1. svn版本搭建
  2. Python的Set和List的性能比较 + 两者之间的转换
  3. 一个ListView布局的不断演化
  4. C++ pair用法
  5. ember.js:使用笔记3 活用{{bind-attr}}
  6. Java: 基类、子类、构造函数、程序块的初始化顺序
  7. 牛一网ecshop家电数码模板(仿易迅网)for ecshop 2.7.3
  8. css的三大特性
  9. 把excel数据导入mysql中
  10. 关于json对象的深拷贝
  11. Linux云计算工程师
  12. css新增伪类
  13. 读取.Properties文件以及Spring注解读取文件内容
  14. C# 如何物理删除有主外键约束的记录?存储过程实现
  15. 二、持久层框架(Hibernate)
  16. nginx mp3
  17. maven自定义脚手架(快速生成项目)
  18. LCA算法总结
  19. The Closest M Points
  20. 001-jpa基本概念以及基础注解

热门文章

  1. redis的基本介绍
  2. 命令行安装kvm虚拟机、桥接网络、用virt-manager管理
  3. zabbix基础知识
  4. 小程序要求的 TLS 版本必须大于等于 1.2
  5. IconMoon图标字体制作
  6. abap function module中的异常处理
  7. spring——事务管理
  8. [py]__name__ 属于哪个文件
  9. eclipse回退到上个版本
  10. CentOS 查看系统 CPU 个数、核心数、线程数