BZOJ 1609 [Usaco2008 Feb]Eating Together麻烦的聚餐:LIS LDS (nlogn)

题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1609

题意:

  给你一个只由数字"1,2,3"组成的序列a[i],共n个数。

  你可以任意更改这些数字,使得序列中每一种数字都“站在一起”,并且单调不减或不增。

  例如:"1111222", "332211"...

  问你至少更改多少个数字。

 

题解:

  单调不减:求原序列LIS(最长非降子序列),当前答案t1 = n - LIS.

  单调不增:求原序列LDS(最长非升子序列),当前答案t2 = n - LDS.

  最终答案ans = min(t1,t2).

  注:n为30000,求LIS & LDS用nlogn方法。

 

AC Code:

 1 #include <iostream>
 2 #include <stdio.h>
 3 #include <string.h>
 4 #define MAX_N 30005
 5 
 6 using namespace std;
 7 
 8 int n;
 9 int a[MAX_N];
10 int d[MAX_N];
11 
12 int cal_lis()
13 {
14     int len=1;
15     d[1]=a[0];
16     for(int i=1;i<n;i++)
17     {
18         if(a[i]>=d[len])
19         {
20             d[++len]=a[i];
21             continue;
22         }
23         int lef=1;
24         int rig=len;
25         while(rig-lef>1)
26         {
27             int mid=(lef+rig)/2;
28             if(a[i]>=d[mid]) lef=mid;
29             else rig=mid;
30         }
31         int ans;
32         if(a[i]<d[lef]) ans=0;
33         else ans=lef;
34         d[ans+1]=min(d[ans+1],a[i]);
35     }
36     return len;
37 }
38 
39 int cal_lds()
40 {
41     int len=1;
42     d[1]=a[0];
43     for(int i=1;i<n;i++)
44     {
45         if(a[i]<=d[len])
46         {
47             d[++len]=a[i];
48             continue;
49         }
50         int lef=1;
51         int rig=len;
52         while(rig-lef>1)
53         {
54             int mid=(lef+rig)/2;
55             if(a[i]<=d[mid]) lef=mid;
56             else rig=mid;
57         }
58         int ans;
59         if(a[i]>d[lef]) ans=0;
60         else ans=lef;
61         d[ans+1]=max(d[ans+1],a[i]);
62     }
63     return len;
64 }
65 
66 int main()
67 {
68     cin>>n;
69     for(int i=0;i<n;i++)
70     {
71         cin>>a[i];
72     }
73     int v1=cal_lis();
74     int v2=cal_lds();
75     cout<<n-max(v1,v2)<<endl;
76 }

 

转载于:https://www.cnblogs.com/Leohh/p/7604687.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/253282.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Oracle 数据库字典 sys.obj$ 表中关于type#的解释

sys.obj$ 表是oracle 数据库字典表中的对象基础表&#xff0c;所有对象都在该表中有记录&#xff0c;其中type#字段表明对象类型&#xff0c;比如有一个表 test &#xff0c;则该对象在sys.obj$ 中存在一条记录&#xff0c;name列为test&#xff0c; type#列为2&#xff0c;表示…

Python高级特性:列表生成式

列表生成式即List Comprehensions&#xff0c;是Python内置的非常简单却强大的可以用来创建list的生成式。 最常见的例子&#xff1a; 生成list [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]可以用list(range(1, 11))&#xff1a;>>> list(range(1, 11)) [1, 2, 3, 4, 5, 6, 7, 8…

2018年智能音箱对比

众所周知&#xff0c;2014年底&#xff0c;电商巨头亚马逊推出智能音箱产品Echo之后&#xff0c;引起市场的强烈反响。随后、谷歌、微软、苹果均开始布局智能音箱市场&#xff0c;国内公司以玲珑科技打头阵。2017年国内公司纷纷发布智能音箱&#xff0c;被称为智能音箱元年。经…

AMD与CMD区别

AMD&#xff1a;异步模块定义&#xff0c;是一个浏览器端模块化开发的规范&#xff0c;由于不是原生JS支持,使用AMD规范需要用到require.js库require.js注意解决两个问题1、多个js文件可能有依赖关系&#xff0c;被依赖的文件需要早于依赖它的文件加载到浏览器2、js加载的时候浏…

[LeetCode] Interleaving String

1. 是一个很明显的动态规划题。 2. s3中的每个字符不是s1中的就是s2中的&#xff0c;只要根据它之前的状态做转移就可以。 1 class Solution {2 public:3 bool isInterleave(string s1, string s2, string s3) {4 int n s1.size();5 int m s2.size();6 …

Python Urllib库详解

Urllib库详解 什么是Urllib? Python内置的HTTP请求库 urllib.request 请求模块 urllib.error 异常处理模块 urllib.parse url解析模块 urllib.robotparser robots.txt解析模块 相比Python2变化 python2 import urllib2 response urllib2.urlopen(http://www.baidu.com) pytho…

LVDS通信接口详细介绍

1. 概述 LVDS Low-Voltage Differential Signaling 低电压差分信号&#xff0c;属于平衡传输信号。 这种技术的核心是采用极低的电压摆幅高速差动传输数据&#xff0c;从而有以下特点&#xff1a; 低功耗---低误码率---低串扰---低抖动---低辐射 良好的信号完整性。 推…

ThinkPHP简单的验证码实现

ThinkPHP简单的验证码实现 写一个最简单的TP验证码。 写Controller 首先在Controller/IndexController.class.php&#xff08;简称Index&#xff09;文件中编辑&#xff1a; 1 <?php 2 namespace Home\Controller; 3 use Think\Controller; 4 use Think\Verify;//这个类…

Celery框架简单实例

Python 中可以使用Celery框架 Celery框架是提供异步任务处理的框架&#xff0c;有两种用法&#xff0c;一种&#xff1a;应用程式发布任务消息&#xff0c;后台Worker监听执行&#xff0c;好处在于不影响应用程序继续执行。第二种&#xff0c;设置定时执行&#xff08;这边没测…

沸腾新十年 | 中国语音产业江湖和科大讯飞的前半生

沸腾新十年 | 中国语音产业江湖和科大讯飞的前半生 2019-01-09 来源:左林右狸 写在前面&#xff1a; 这是《沸腾新十年》的第十一篇剧透文&#xff0c;也是2019年的第一篇剧透文&#xff0c;从确认选题到采编到反复修改&#xff0c;这篇稿子操作时间前后历经近半年。究其原…

权值

【概述】 在数学领域&#xff0c;权值指加权平均数中的每个数的频数&#xff0c;也称为权数或权重。在搜索引擎中&#xff0c;权值越高的内容在排序中越靠前。 实际应用中可以通过修改权值来重新调整索引在列表中的排序位置。 【示例】 1 /**2 * 创建索引3 */4 …

vue.js devtools的安装

http://www.cnblogs.com/lolDragon/p/6268345.html http://blog.csdn.net/wxl1555/article/details/76091614 转载于:https://www.cnblogs.com/songmengyao/p/7609548.html

[oracle]分区表学习

&#xff08;一&#xff09;什么是分区 所谓分区&#xff0c;就是将一张巨型表或巨型索引分成若干个独立的组成部分进行存储和管理&#xff0c;每一个相对小的&#xff0c;可独立管理的部分&#xff0c;称为分区。 &#xff08;二&#xff09;分区的优势 提高数据可管理性。对表…

主函数和子函数的传值传址例子

#include<string.h> #include<stdlib.h> #include<stdio.h> typedef unsigned char Uint8; void *Test_Function(Uint8 **add)//返回堆空间&#xff0c;需要用二级指针 { Uint8 *devInit(Uint8 *)malloc(20*sizeof(Uint8)); memcpy(devInit,"malloc …

Matcher类的简单使用

今天工作时遇到一个问题&#xff0c; 用正则处理html标签时不知该如何下手。还好有Matcher帮助解决了问题。需求如下&#xff1a;例如有如下html文章内容&#xff1a;<p><a href"www.baidu.com">百度的链接</a>; 这是一个百度的链接。 <a href&…

USB 摄像头成熟方案介绍

UVC&#xff0c;全称为&#xff1a;USB video class 或USB video device class。是Microsoft与另外几家设备厂商联合推出的为USB视频捕获设备定义 的协议标准&#xff0c;目前已成为USB org标准之一。 如今的主流操作系统(如Windows XP SP2 and later, Linux 2.4.6 and later…

JS练习:商品的左右选择

代码&#xff1a; <!DOCTYPE html> <html> <head><meta charset"UTF-8"><title>商品的左右选择</title><!--步骤分析1. 确定事件: 点击事件 :onclick事件2. 事件要触发函数 selectOne3. selectOne要做一些操作(将左边选中的元…

java生成首字母拼音简码的总结

百度找到了某论坛高人写的java&#xff08;具体论坛记不清了&#xff09;&#xff0c;直接用来调用&#xff0c;再次非常感谢&#xff0c;基本上实现了我的需求 package MD5;import java.util.Scanner;public class ChineseToPinYin { /** * 汉字转拼音缩写 * * param str * 要…