首页 > 其他分享 >每日一题:奶牛排队

每日一题:奶牛排队

时间:2025-01-18 14:22:38浏览次数:1  
标签:sx tx 每日 排队 tn sn 数组 奶牛

题目链接:https://www.luogu.com.cn/problem/P6510
题目描述:
奶牛在熊大妈的带领下排成了一条直队。
显然,不同的奶牛身高不一定相同……
现在,奶牛们想知道,如果找出一些连续的奶牛,要求最左边的奶牛A是最矮的,最右边的B是最高的,且B奶牛高于A奶牛。中间如果存在奶牛,则身高不能和A,B奶牛相同。问这样的奶牛最多会有多少头?

输入:第一行一个正整数N表示奶牛的头数。

输出:一行一个整数,表示最多奶牛数。

解题思路:我们要找到从后向前数第二个后缀最大值的位置k,A一定在该位置的右侧。并且只要A在k右侧,A是当前序列的后缀最小值,那么A就是一个正确的左端点。

具体代码

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define NO cout<<"NO"<<endl;
#define YES cout<<"YES"<<endl;
ll NUM=1e9+2;

const int maxn = 100005;

int n, ans, tx, tn;
int a[maxn], sx[maxn], sn[maxn];

int main() {
    scanf("%d", &n);
    for (int i=1;i<=n;++i) scanf("%d",a+i);
    for (int i=1;i<=n;++i) {
        while (tn && a[sn[tn]] >= a[i]) --tn;
        ////保持 sn 数组的元素所对应的 a 数组元素呈现单调递减的性质
        while (tx && a[sx[tx]] < a[i]) --tx;
        ////保持 sx 数组的元素所对应的 a 数组元素呈现单调递增的性质
        int k = upper_bound(sn+1, sn+1+tn, sx[tx])-sn;
        ////在[sn+1,sn+1+tn)区间中查找第一个大于 sx[tx] 的元素并计算长度
        if (k!=(tn+1)) {
            ans=max(ans, i - sn[k] + 1);
            ////就更新 ans 成为最大值;
        }
        sn[++tn]=i;
        //// 将当前元素索引存储到 sn 数组中
        sx[++tx]=i;
    }//// 将当前元素索引存储到 sx 数组中
    printf("%d\n", ans);
    return 0;
}

标签:sx,tx,每日,排队,tn,sn,数组,奶牛
From: https://www.cnblogs.com/shenqimaomaoxia/p/18678423

相关文章

  • P1824 进击的奶牛
    前言今天zty带来的是P1824进击的奶牛,大家给个赞呗,zty还要上学,发作品会少一点先赞后看养成习惯先赞后看养成习惯演示用编译器及其标准DevC++6.7.5RedpandaC++14正文进击的奶牛题目描述FarmerJohn建造了一个有......
  • 可达鸭J3题目 排队接水
    题目描述有n个人在一个水龙头前排队接水,假如每个人接水的时间为Ti,请编程找出这n个人排队的一种顺序(若有多种顺序则编号小的在前),使得n个人的平均时间花费最小。输入描述输入文件共两行,第一行为n;第二行分别表示第1个人到第n个人每人的接水时间T1,T2,…,Tn,每个数据之间有1个......
  • 【练习】力扣热题 100 每日温度
    题目给定一个整数数组temperatures,表示每天的温度,返回一个数组answer,其中answer[i]是指对于第i天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用0来代替。示例1:输入:temperatures=[73,74,75,71,69,72,76,73]输出:[1,1,4,2,1,1......
  • 高级java每日一道面试题-2025年01月16日-框架篇[Mybatis篇]-说说Mybatis的缓存机制?
    如果有遗漏,评论区告诉我进行补充面试官:说说Mybatis的缓存机制?我回答:在Java高级面试中,MyBatis的缓存机制是一个重要的话题。MyBatis是一个流行的Java持久化框架,它提供了强大的数据库访问能力和灵活的SQL映射配置。为了提高查询性能并减少数据库访问次数,MyBatis引入了......
  • 每日一题洛谷P5726 【深基4.习9】打分C++
    #include<iostream>#include<iomanip>usingnamespacestd;intmain(){ intn; cin>>n; intstr[1000]={0}; intmax=0; intmin=10; for(inti=0;i<n;i++){ cin>>str[i]; if(str[i]>max){ max=str[i......
  • JavaWeb课后笔记及体会分享(每日一更)
           从今天开始学习JavaWeb,在接下来的时间里我将学习JavaSE,MySQL,Web前端,JavaEE,SSM三大框架,SpainBoot,SpringCloud,以及一些常见面试题的练习。1.IDEA常用快捷键  Shift两次:包含各种文件、方法的搜索Ctrl+Shift+F:根据输入内容查找整个项目或指定目录内文件......
  • 基于yolov4深度学习网络的排队人数统计系统matlab仿真,带GUI界面
    1.算法仿真效果matlab2022a仿真结果如下(完整代码运行后无水印):  仿真操作步骤可参考程序配套的操作视频。 2.算法涉及理论知识概要       在现代社会的众多场景中,如银行、车站、餐厅等,排队人数的统计对于资源分配、服务优化以及人员管理等方面具有极为重......
  • 【网络云SRE运维开发】2025第3周-每日【2025/01/15】小测-【第14章ospf高级配置】理论
    文章目录【网络云SRE运维开发】2025第3周-每日【2025/01/15】小测-【第14章ospf高级配置】理论和实操14.1选择题在H3C设备上配置OSPF时,以下哪个命令用于启动OSPF进程?A.[H3C]ospfenableB.[H3C]ospf1C.[H3C]ospfstartD.[H3C]ospfprocessOSPF区域0......
  • 【网络云SRE运维开发】2025第3周-每日【2025/01/15】小测-【第14章ospf高级配置】理论
    文章目录14.1选择题解题思路和参考答案14.2理论题解题思路和参考答案14.3实操题解题思路和参考答案思科(Cisco)设备华为(Huawei)设备小米/锐捷(或其他支持标准CLI命令的设备)通过网络管理工具注意事项【网络云SRE运维开发】2025第3周-每日【2025/01/15】小测-【第14章o......
  • 2025/1/15 力扣每日一题(3066. 超过阈值的最少操作数 II)
    来源:LeetCode链接:https://leetcode.cn/problems/minimum-operations-to-exceed-threshold-value-ii/description/?envType=daily-question&envId=2025-01-15题目:给你一个下标从0开始的整数数组nums和一个整数k。一次操作中,你将执行:选择nums中最小的两个整数x和y......