P1067 合唱队形
时间: 1000ms / 空间: 131072KiB / Java类名: Main

背景

NOIP2004 提高组 第三道

描述

    N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学排成合唱队形。

合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2…,K,他们的身高分别为T1,T2,…,TK,  则他们的身高满足T1<...<Ti>Ti+1>…>TK(1<=i<=K)。

你的任务是,已知所有N位同学的身高,计算最少需要几位同学出列,可以使得剩下的同学排成合唱队形。

输入格式

   输入文件chorus.in的第一行是一个整数N(2<=N<=100),表示同学的总数。第一行有n个整数,用空格分隔,第i个整数Ti(130<=Ti<=230)是第i位同学的身高(厘米)。

输出格式

    输出文件chorus.out包括一行,这一行只包含一个整数,就是最少需要几位同学出列。

测试样例1

输入


186 186 150 200 160 130 197 220

输出

4

备注

对于50%的数据,保证有n<=20;
对于全部的数据,保证有n<=100。
 
题意:给你一个序列,为了使得序列满足T1<...<Ti>Ti+1>…>TK(1<=i<=K)。 需要删除一些数
问最少需要删除多少个数
题解:枚举中间点i 左边计算以i为结尾的最长上升子序列的长度l[i]
右边计算以i为起点的最长下降子序列的长度r[i]  取minx=min(minx,n-(l[i]+r[i]-1));
 /******************************
code by drizzle
blog: www.cnblogs.com/hsd-/
^ ^ ^ ^
O O
******************************/
//#include<bits/stdc++.h>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<map>
#include<algorithm>
#include<queue>
#include<cmath>
#define ll __int64
#define PI acos(-1.0)
#define mod 1000000007
using namespace std;
int n;
int a[];
int l[],r[];
int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)
scanf("%d",&a[i]);
int ans[];
int exm=;
ans[]=;
for(int i=;i<=n;i++)
{
if(a[i]>ans[exm])
{
exm++;
ans[exm]=a[i];
l[i]=exm;
}
else
{
int pos=lower_bound(ans+,ans+exm,a[i])-ans;
ans[pos]=a[i];
l[i]=pos;
}
}
exm=;
ans[]=;
for(int i=n;i>=;i--)
{
if(a[i]>ans[exm])
{
exm++;
ans[exm]=a[i];
r[i]=exm;
}
else
{
int pos=lower_bound(ans+,ans+exm,a[i])-ans;
ans[pos]=a[i];
r[i]=pos;
}
}
int minx=;
for(int i=;i<=n;i++)
minx=min(minx,n-(l[i]+r[i]-));
printf("%d\n",minx);
return ;
}

tyvj 1067 dp 两次LIS(nlogn)的更多相关文章

  1. hdu5406 CRB and Apple dp+两个LIS

    题意转换为:给定n个数,求两个最长的不相交的LIS. 先说经典题一个LIS的nlogn做法.枚举当前数,若比末尾数大,插入末尾,否则二分查找,插入合适位置. 通过此题,我们有了一个用树状数组或线段树+ ...

  2. hdu 5748(求解最长上升子序列的两种O(nlogn)姿势)

    Bellovin Time Limit: / MS (Java/Others) Memory Limit: / K (Java/Others) Total Submission(s): Accepte ...

  3. HDU 5087 (线性DP+次大LIS)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5087 题目大意:求次大LIS的长度.注意两个长度相同的LIS大小比较,下标和大的LIS较大. 解题思 ...

  4. DP(两次) UVA 10163 Storage Keepers

    题目传送门 /* 题意:(我懒得写,照搬网上的)有n个仓库,m个人看管.一个仓库只能由一个人来看管,一个人可以看管多个仓库. 每个人有一个能力值pi,如果他看管k个仓库,那么所看管的每个仓库的安全值为 ...

  5. tyvj 1067 合唱队形 dp LIS

    P1067 合唱队形 时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 NOIP2004 提高组 第三道 描述     N位同学站成一排,音乐老师要请其中的(N ...

  6. hdu4352(数位DP + LIS(nlogn))

    题目描述: 给定一个区间中,将区间的每一个数看成一个字符串,求这个区间内每个字符串的最大上升 子序列等于k的个数. 可以采用nlogn的LIS(用一个C数组记录长度为i的最大上升子序列的结尾最小值), ...

  7. AT2827 最长上升子序列LIS(nlogn的DP优化)

      题意翻译 给定一长度为n的数列,请在不改变原数列顺序的前提下,从中随机的取出一定数量的整数,并使这些整数构成单调上升序列. 输出这类单调上升序列的最大长度. 数据范围:1<=n<=10 ...

  8. 【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 ...

  9. HDU 1950 LIS(nlogn)

    Bridging signals Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

随机推荐

  1. 二模 (6) day2

    第一题: 题目大意:50*50的格子里玩贪吃蛇.给出N步扭头的操作,判断贪吃蛇会在第几步挂掉.(蛇初始向东) 解题过程: 1.一开始的方法是:为了加快速度,只保存头和尾的坐标,然后保存尾巴的方向,每次 ...

  2. C++-高效的swap

    原始版本: template<typename T> void swap(T& a, T& b) { T tmp(a); a = b; b = tmp; } 此版本不重视效 ...

  3. LepideMigrator for Documents Step by Step

    blog: http://blog.csdn.net/foxdave A Manager Marketing Operations invite me to review their product, ...

  4. word表格从 web版视图 转 到页面视图 模式后 表格的一部分显示不出来

    解决办法 在web视图 中选择 表格  ----->右键  表格属性  表格 下面 的  文字环绕  选择 无

  5. AFNetworking3.0概述

    最近一直在研究iOS网络开发,对NSURLSession套件进行了深入研究,作为iOS开发者,熟悉苹果的原生技术,可以在不需要第三方框架的情况下进行网络开发,也更有利于从底层了解iOS网络请求的原理, ...

  6. IIS 6.0 401 错误

    1.错误号401.1 症状:HTTP 错误 401.1 - 未经授权:访问由于凭据无效被拒绝 分析:  由于用户匿名访问使用的账号(默认是IUSR_机器名)被禁用,或者没有权限访问计算机,将造成用户无 ...

  7. MongoDB error: couldn't connect to server 127.0.0.1:27017 src/mongo/shell/mongo.js(转)

    rror: couldn't connect to server 127.0.0.1:27017 src/mongo/shell/mongo.js 一般这种情况就是:自己指定的数据库,所以不能.自动加 ...

  8. (转)mysql各个主要版本之间的差异

    原文:http://blog.csdn.net/z1988316/article/details/8095407   一.各版本的常用命令差异 show innodb status\G mysql-5 ...

  9. Java中接口作为方法的返回

    在<算法>中的散列表一节,在用拉链法实现散列表的API时要求实现以下一个方法: public Iterable<Key> keys() 我们知道Iterable是一个接口,那么 ...

  10. Python入门(二,基础)

    一,基本语法 Python标识符 在python里,标识符有字母.数字.下划线组成. 在python中,所有标识符可以包括英文.数字以及下划线(_),但不能以数字开头. python中的标识符是区分大 ...