本题直接求解十分困难,因为在不知道整个序列的数字规律时当前所作决策都无法保证最优性。

考虑正难则反,题目转化为将一个非降序列分成尽量少的几段,让每段对应原问题的双端队列。

先将原数组排序,由于原数组下标对应了插入的顺序,那么根据双端队列的性质,被划分出的每一段的下标都应该满足单谷性质(最先插入的在最中间,之后向两边递增)。

又发现由于是非降序列,那么相同数字的次序不是固定的,可以通过交换两个相同数字使答案更优。

所以此题做法为:对数字相同的每一段依次考虑,利用贪心策略把当前序列(下标)递减或递增地插入序列末尾。

#include <cstdio>
#include <algorithm>
using namespace std; struct P{int v,od;}a[200005];
int n,ans=1; bool cmp(P x,P y) {return x.v==y.v?x.od<y.od:x.v<y.v;} int main()
{
scanf("%d",&n);
for(int i=1;i<=n;++i)
scanf("%d",&a[i].v),a[i].od=i;
sort(a+1,a+n+1,cmp);
bool fl=0; int last=n+2;
for(int i=1,j=1;i<=n;i=++j)
{
while(j<=n&&a[j+1].v==a[j].v) ++j;
if(fl)
{
if(a[i].od>last) last=a[j].od;
else ++ans,fl=0,last=a[i].od;
}
else
{
if(a[j].od<last) last=a[i].od;
else fl=1,last=a[j].od;
}
}
printf("%d",ans);
return 0;
}

BZOJ2457 双端队列 题解的更多相关文章

  1. bzoj2457 双端队列

    虽然分类在数据结构里,但是实际上是个贪心题...... 我自己一开始想到了一个错误的贪心.后来发现对于相等值的处理不行. 有个很神的转化,就是把排好序的队列以及对应的原下标都给搞出来. 然后考虑其中一 ...

  2. 【BZOJ2457】[BeiJing2011]双端队列 贪心+模拟

    [BZOJ2457][BeiJing2011]双端队列 Description        Sherry现在碰到了一个棘手的问题,有N个整数需要排序.        Sherry手头能用的工具就是若 ...

  3. BZOJ2457 [BeiJing2011]双端队列 【贪心】

    题目 Sherry现在碰到了一个棘手的问题,有N个整数需要排序. Sherry手头能用的工具就是若干个双端队列. 她需要依次处理这N个数,对于每个数,Sherry能做以下两件事: 1.新建一个双端队列 ...

  4. BZOJ2457 BeiJing2011 双端队列

    [问题描述] Sherry现在碰到了一个棘手的问题,有N个整数需要排序.  Sherry手头能用的工具就是若干个双端队列.        她需要依次处理这N个数,对于每个数,Sherry能做以下两件事 ...

  5. [BZOJ2457][BeiJing2011]双端队列 (单调性)

    正如lyd所说,和数据结构本身没什么太大关联 题意 中文题面   Sherry现在碰到了一个棘手的问题,有N个整数需要排序.        Sherry手头能用的工具就是若干个双端队列.        ...

  6. Gym 101911E "Painting the Fence"(线段树区间更新+双端队列)

    传送门 题意: 庭院中有 n 个围栏,每个围栏上都被涂上了不同的颜色(数字表示): 有 m 条指令,每条指令给出一个整数 x ,你要做的就是将区间[ x第一次出现的位置 , x最后出现的位置 ]中的围 ...

  7. CH 2601 - 电路维修 - [双端队列BFS]

    题目链接:传送门 描述 Ha'nyu是来自异世界的魔女,她在漫无目的地四处漂流的时候,遇到了善良的少女Rika,从而被收留在地球上.Rika的家里有一辆飞行车.有一天飞行车的电路板突然出现了故障,导致 ...

  8. BZOJ 2457 - 双端队列 - [思维题]

    题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=2457 Description Sherry现在碰到了一个棘手的问题,有N个整数需要排序. ...

  9. bzoj 2457 [BeiJing2011]双端队列 模拟+贪心

    [BeiJing2011]双端队列 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 457  Solved: 203[Submit][Status][D ...

随机推荐

  1. DHCP的原理与配置

    DHCP 动态主机配置协议(Dynamic Host Configuration Protocol) 可以减少管理员的工作量 避免用户手工配置网络参数时造成的地址冲突 DHCP报文类型: 报文类型   ...

  2. pytest 给用例打标签

    1.给用例添加自定义标签命令:@pytest.mark.tagname     #tagname是自定义的标签名 import pytest class TestClass(): @pytest.ma ...

  3. 【VBA】打开关闭工作簿等

    打开关闭工作簿等 1 Sub 打开工作簿() 2 Dim sFilePath As String 3 sFilePath = "D:\A.xls" 4 Dim oWB As Wor ...

  4. 【UG二次开发】创建、查询、编辑成型特征的函数

    创建成型特征函数UF_MODL_create_boss 通过设置凸台的参数建立凸台特征UF_MODL_create_rect_pad 通过设置矩形凸垫的参数建立矩形凸垫特征UF_MODL_create ...

  5. noConflict冲突处理机制

    最近接手了一个古早项目,用的backbone,于是正好学习一下早期MVC框架的源码. 这篇主要写冲突处理机制,源码其实就一个函数,代码也很短.原理也很好理解,总结起来就是:每执行一次noConflic ...

  6. 关于kubernetes的十七个实验(二)

    写在开头 时隔好几天,结束了毕业设计中期答辩,更新第二节. 实验二与Kubeadm Kubeadm解决了以下问题:处理TLS加密配置,部署核心Kubernetes组件并确保其他节点可以轻松加入集群. ...

  7. 性能工具之Jmeter压测Hprose RPC服务

    概述 Hprose(High Performance Remote Object Service Engine),国人开发的一个远程方法调用的开源框架.它是一个先进的轻量级的跨语言跨平台面向对象的高性 ...

  8. VScode如何设置模板字符串html标签自动补全

    在学习Vue的过程中,很多时候都需要用到模板字符串,但是里面的html标签一个字符一个字符的去敲未免也太麻烦了吧,其实我们可以通过设置来实现在模板字符串中按Tab键快速补全html标签. 1.在VSC ...

  9. c#json将字符串反序列化成对象时不新建类的做法

    在服务端代码文件中加上struct结构体就能解决 struct LocationInfo { public string LocationID { get; set; } public string ...

  10. 12、关于系统cpu的计算

    1.cpu核数和逻辑cpu: CPU总核数 = 物理CPU个数 * 每颗物理CPU的核数: 总逻辑CPU数 = 物理CPU个数 * 每颗物理CPU的核数 * 超线程数 2.查看linux的cpu相关信 ...