IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> ACM数据结构 -> 正文阅读

[数据结构与算法]ACM数据结构

单调队列 单调栈

例https://vjudge.net/problem/HDU-3530
(单调队列 + 双指针)
这是道好题,当时做得挺折磨我的,主要是因为思路方面要想清楚:
从数组头开始,一直加元素,同时维护最大值和最小值队列。若>k则踢掉队尾元素,若再>=m条件时则记录下长度。

/*** 
 * @Practice Win
 */
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define maxn 10000
struct Point{
    ll x;
    ll n;
    bool operator < (const Point& b){
        return n<b.n;
    }
};
deque<Point> dqmax;
deque<Point> dqmin;
Point a[maxn+11];
ll l=0,r=0;
void DqmaxPushB(Point a){
    while(!dqmax.empty() && a.n>=dqmax.back().n)  dqmax.pop_back();
    dqmax.push_back(a);
}
void DqminPushB(Point a){
    while(!dqmin.empty() && a.n<=dqmin.back().n)  dqmin.pop_back();
    dqmin.push_back(a);
}
int main(){
    std::ios::sync_with_stdio(false);
    ll n,m,k;
    while(scanf("%lld %lld %lld",&n,&m,&k)!=EOF){
        dqmax.clear();
        dqmin.clear();
        l=0,r=0;
        ll maxe=0,mine=1000000+11;
        ll length=0,maxl=0;
        for(int i=0;i<n;i++){
            cin>>a[i].n;
            a[i].x=i;
        } 
        ll d;
        ll flag=0;
        for(r=0;r<n;r++){
            DqmaxPushB(a[r]);
            DqminPushB(a[r]);
            length++;
            d=dqmax.front().n-dqmin.front().n;
            while(d>k){
                if(!dqmax.empty() && a[l].x==dqmax.front().x)  dqmax.pop_front();
                if(!dqmin.empty() && a[l].x==dqmin.front().x)  dqmin.pop_front();
                l++;
                length--;
                if(dqmax.empty() || dqmin.empty()){
                    d=0;break;
                }  
                else  d=dqmax.front().n-dqmin.front().n;
            }
            if(d>=m)  if(length>maxl)  maxl=length;
        }
        cout<<maxl<<endl;
    }
    return 0;
}





  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-07-25 11:55:27  更:2021-07-25 11:55:32 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 16:51:23-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码