Lydsy2457 双端队列(双端队列思想)

问题试求至少用几个双端队列可排序

那么我们不妨换过来思考,将数列排好序后,再来找队列个数

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;

struct my{
   int x,id;
};

const int maxn=200000+10;
my a[maxn];
int Max[maxn],Min[maxn];

bool cmp(const my &c,const my &d){
     if(c.x==d.x) return c.id<d.id;
     return c.x<d.x;
}

int main(){
    int n;
    scanf("%d",&n);
    for (int i=1;i<=n;i++){
        scanf("%d",&a[i].x);
        a[i].id=i;
    }
    int top=1;
    sort(a+1,a+1+n,cmp);
    Min[1]=a[1].id;
    a[0].id=a[1].id;
    for (int i=1;i<=n;i++){
        if(a[i].x!=a[i-1].x||i==1){
            Max[top]=a[i-1].id;
            Min[++top]=a[i].id;
        }
    }
    int ans=0,h=0x3f3f3f3f;
    bool b=0;
    for (int i=1;i<=top;i++){
        if(!b){
           if(Max[i]<h) h=Min[i];
           else {
            h=Max[i];
            b=1;
           }
        }
        else{
            if(Min[i]>h) h=Max[i];
            else{
                ans++;
                b=0;
                h=Min[i];
            }
        }
    }
    printf("%d\n",ans);
return 0;
}

原文地址:https://www.cnblogs.com/lmjer/p/8975602.html

时间: 2024-10-10 12:54:08

Lydsy2457 双端队列(双端队列思想)的相关文章

【C/C++学院】0828-STL入门与简介/STL容器概念/容器迭代器仿函数算法STL概念例子/栈队列双端队列优先队列/数据结构堆的概念/红黑树容器

STL入门与简介 #include<iostream> #include <vector>//容器 #include<array>//数组 #include <algorithm>//算法 using namespace std; //实现一个类模板,专门实现打印的功能 template<class T> //类模板实现了方法 class myvectorprint { public: void operator ()(const T &

从0开始学算法--数据结构(2.4双端队列与单调队列)

双端队列是特殊的队列,它与队列不同的是可以将元素加入头或尾,可以从头或尾取出元素(滑稽-这部就是栈和队列结合了吗). c++标准库 头文件 #include<deque> 定义 deque<int>deq; 取出队头,尾元素 deq.pop_front(); deq.pop_back(); 访问队头,尾元素 deq.front(); deq.back(); 向队头,尾加入元素 deq.push_front(x); deq.push_back(x); 单调队列是在队列的基础上使它保持

消费端如何保证消息队列MQ的有序消费

消息无序产生的原因 消息队列,既然是队列就能保证消息在进入队列,以及出队列的时候保证消息的有序性,显然这是在消息的生产端(Producer),但是往往在生产环境中有多个消息的消费端(Consumer),尽管消费端在拉取消息时是有序的,但各个消息由于网络等方面原因无法保证在各个消费端中处理时有序. 场景分析 先后两次修改了商品信息,消息A和消息B先后同步写入MySQL,接着异步写入消息队列中发送消息,此时消息队列生产端(Producer)按时序先后发出了A和B两条消息(消息A先发出,消息B后发出)

浅谈单调队列:死海不是海,单调队列不是队列

1.滑动窗口最值问题 给定一个长度为n的序列a1,a2,-ai,-,an,将一个长为k的滑动窗口自序列最左端向右边滑动.例如:初始时,窗口内的子序列为a1,a2,-,ak:当窗口向右滑动一位,此时窗口内的子序列变为a2,a3,-,ak+1. 我们要解决的问题是,给定长度为n的序列以及滑动窗口的大小k,求每一个滑动窗口内的最小值和最大值. 以长度为5的序列1, 3, 4, 5, 7滑动窗口k=3为例说明: 第1个滑动窗口(1, 3, 4)的最小值.最大值分别为1和4: 第2个滑动窗口(3, 4,

私有云车牌识别支持app端、pc端、H5端接口调用

关键词 私有云车牌识别技术.服务器端车牌识别技术.云端车牌识别技术.私有化车牌识别技术.服务器端车牌识别.私有化车牌识别.私有云车牌识别. 什么叫私有云车牌识别呢? 私有云车牌识别即服务器端车牌识别,是一款基于服务器平台的车牌OCR识别服务程序,企业可以将该识别服务部署在自有服务器上(云服务器或本地服务器),部署完成后,APP端.PC客户端.web端.微信H5端等均可发送识别请求,通过Web Service接口调用该识别服务,上传车牌图像在服务器端完成识别后,返回标准XML识别结果,整个识别过程

关于TCP全连接队列和半连接队列

转:https://www.toutiao.com/a6721163619758768647/ 在TCP的三次握手中存在着两个队列.backlog.tcp_abort_on_overflow等概念知识点.常见的连接服务异常有很多,如Connection refused等问题.通过对这些知识的理解有助于结合一些排查手段有效地解决一些生产上出现的连接服务异常问题.下面将对这些进行讨论分析. 一.TCP三次握手 握手过程 第一次:client发送syn到server进行握手 第二次:server收到s

TCP的SYN队列和Accept队列

首先我们必须明白,处于“LISTENING”状态的TCP socket,有两个独立的队列: SYN队列(SYN Queue) Accept队列(Accept Queue) 这两个术语有时也被称为“reqsk_queue”,“ACK backlog”,“listen backlog”,甚至“TCP backlog”,但是这篇文章中我们使用上面两个术语以免造成混淆. SYN队列 SYN队列存储了收到SYN包的连接(对应内核代码的结构体:struct inet_request_sock).它的职责是回

系统拆分解耦利器之消息队列---RabbitMQ-工作队列

[一曲广陵不如晨钟暮鼓] 本文,我们来介绍RabbitMQ中的工作队列.在正式开始之前,我们假设RabbitMQ服务已经启动,运行端口为5672,如果各位看官有更改过默认配置,那么就需要修改为对应端口,保持一致即可. 准备工作: 操作系统:window 7 x64 其他软件:eclipse mars,jdk7,maven 3 --------------------------------------------------------------------------------------

dr-helper项目设计介绍(一个包含移动端和Web端的点餐管理系统)

一.源码路径 https://github.com/weiganyi/dr-helper 二.界面 通过浏览器访问Web服务,可以看到界面如下: ADT-Bundle编译工程生成dr-helper.apk,安装后可以看到应用界面如下: 三.背景 Java诞生后主要就是用于Web开发,随着Android的兴起,其在移动领域也应用广泛.我在学习了Java相关的一系列技术后,想找个项目来实际运用一下.因此我考虑可以基于Java相关的技术来构建一个包括移动端和Web端的餐厅管理系统,在这个项目里我会综合

dr-helper项目设计介绍(一个包括移动端和Web端的点餐管理系统)

一.源代码路径 https://github.com/weiganyi/dr-helper 二.界面 通过浏览器訪问Web服务,能够看到界面例如以下: ADT-Bundle编译project生成dr-helper.apk.安装后能够看到应用界面例如以下: 三.背景 Java诞生后主要就是用于Web开发,随着Android的兴起,其在移动领域也应用广泛.我在学习了Java相关的一系列技术后,想找个项目来实际运用一下.因此我考虑能够基于Java相关的技术来构建一个包含移动端和Web端的餐厅管理系统,