牛客练习赛126(O(n)求取任意大小区间最值)

news2024/12/28 5:54:30

牛客练习赛126(O(n)求取任意大小区间最值)

牛客练习赛126
在这里插入图片描述

A.雾粉与签到题

题意:给出长度为n的数组, 顺序选出任意三个元素,最小化第二个元素

思路:

遍历除了第一个和最后一个元素取最小值即可

AC code:

void solve() {
    int n; cin >> n;
    vector<int> a(n);
    map<int, int> mp;
    for (int i = 0; i < n; i ++) cin >> a[i];
    int mn = 1e18;
    for (int i = 1; i < n - 1; i ++) mn = min(mn, a[i]);
    cout << mn << endl;
}

B.雾粉与数论

题意:给你一个正整数 n n n,请你输出对每个 2 ≤ i ≤ n 2 \le i \le n 2in gcd ⁡ ( i ∗ ( i − 1 ) 2 , i ∗ ( i + 1 ) 2 ) \gcd(\frac {i*(i-1)} 2, \frac {i*(i+1)} 2) gcd(2i(i1),2i(i+1)) 之和对 1 0 9 + 7 10^9+7 109+7 取模。

思路:打表发现规律,奇数直接对答案贡献自身,偶数贡献/2,注意,取模一定要最后取,过程中取模会影响最后结果。

AC code:

void solve() {
    int n; cin >> n;
    int ans = (n * (n + 1) / 2 - 1);
    int ca = n / 2;
    int t = ca * (ca + 1) / 2;
    ans -= t;
    cout << ans % MOD << endl;
}

C.雾粉与最小值(简单版)

题意:

给一个长度为 n n n 的正整数数组 a a a,一个长度为 m m m 的查询数组 q q q q [ i ] = ( v a l , m i n l e n , m a x l e n ) q[i] = (val, minlen, maxlen) q[i]=(val,minlen,maxlen)。 请你按输入顺序处理这 m m m 次查询,对于第 i i i 次查询 q [ i ] = ( v a l , m i n l e n , m a x l e n ) q[i] = (val, minlen, maxlen) q[i]=(val,minlen,maxlen): 请你输出是否存在一个 a a a 的子数组 s s s 满足 m i n ( s ) ≥ v a l min(s) \ge val min(s)val s s s 的长度在 m i n l e n minlen minlen m a x l e n maxlen maxlen 之间。

思路:

  • 首先,预处理除当前元素自身外,最小前缀元素的下标位置,和,最小后缀元素的下标位置,首尾第一个元素分别为-1和n;

  • 然后,对于每个元素x,我们要找出,当x作为某个连续子序列中元素的最小值时,该子序列最长为多少;

  • 通过预处理出的l和r元素,x, x, x, l, x, i, x, x, x, r, x, x,对于元素i,前缀最小为l,则l及之前的序列不能包含,否则会覆盖i作为子序列的最小值,同理,r及其之后的也不能涵盖,则当 a i a_i ai作为某个连续子序列中元素的最小值时, 最长为(r - l - 1)的子序列大小;

  • 依次处理出上述序列后,我们需要进行后缀最值处理,因为长度为n的序列最大的最小值成立,则长度为n-1上同样成立, 从而覆盖未处理过的区间大小;

    比如5 5 5 5 5,每个区间都能扩展5 5 5 5 5,覆盖的只有大小为5的区间长度,对于1 2 3 4的区间长度,通过取后缀最大即可覆盖;

  • 最后得到每个区间大小的最大的最小值;

AC code:

void solve() {
    int n; cin >> n;
    vector<int> a(n);
    for (int i = 0; i < n; i ++) cin >> a[i];
    int mn = *min_element(a.begin(), a.end()), mx = *max_element(a.begin(), a.end());
    
    vector<int> mp(n + 1, -1);
    vector<int> l(n), r(n);
    deque<int> dq;
    for (int i = 0; i < n; i ++) { 
        while (!dq.empty() && a[dq.back()] >= a[i])
            dq.pop_back();
        l[i] = (dq.empty()) ? -1 : dq.back();
        dq.push_back(i);
    }
    
    dq.clear();
    for (int i = n - 1; i >= 0; i --) { 
        while (!dq.empty() && a[dq.back()] >= a[i])
            dq.pop_back();
        r[i] = (dq.empty()) ? n : dq.back();
        dq.push_back(i);
    }

    for (int i = 0; i < n; i ++) {
        int len = r[i] - l[i] - 1;
        mp[len] = max(mp[len], a[i]);
    }  
    for (int i = n - 1; i >= 0; i --) {
        mp[i] = max(mp[i], mp[i + 1]);
    }
    int m; cin >> m;
    while (m --) {
        int s, l, r; cin >> s >> l >> r;
        if (s <= mn) cout << "Yes" << endl;
        else if (s > mx) cout << "No" << endl;
        else {
            if (mp[l] >= s) cout << "Yes" << endl;
            else cout << "No" << endl;
        }
    }
}

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

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

相关文章

Vue3学习第二天记录

Vue3学习第二天记录 背景说明截图记录一个简单的JS文件Vue3的watch()函数Vue3的toRef()/toRefs()函数前端数据类型的分类前端写一个对外暴露的函数前端的...语法Vue3中watch()函数的总结Vue3中watchEffect()函数Vue3中watch()函数的坑Vue3中computed()函数 背景 最近在学习尚硅…

Flutter vscode环境如何进行真机测试

目录 1. 准备工作 1.1 安装Flutter和VS Code 1.2 安装必要的VS Code扩展 1.3 手机设置 2. 配置VS Code调试环境 3. 手机如何退出开发者模式 1. 准备工作 1.1 安装Flutter和VS Code 确保你已经在电脑上安装了Flutter SDK和VS Code。如果还没有&#xff0c;可以参考以下指…

彩虹外链网盘图床文件外链系统源码v5.5

彩虹外链网盘&#xff0c;是一款PHP网盘与外链分享程序&#xff0c;支持所有格式文件的上传&#xff0c;可以生成文件外链、图片外链、音乐视频外链&#xff0c;生成外链同时自动生成相应的UBB代码和HTML代码&#xff0c;还可支持文本、图片、音乐、视频在线预览&#xff0c;这…

校验参数个数工具类

项目中有个需求&#xff1a;前后端参数一致性校验&#xff0c;在某业务场景下后端代码需要校验参数个数&#xff0c;因此设计了1个工具类方便大伙使用&#xff0c;特此简单记录下。 校验参数个数工具类 一、校验工具类CheckNumInsideParamters二、单元测试ParameterSizeTest三…

AI办公自动化:用kimi批量删除文件名末尾的空格

工作任务&#xff1a;文件名末尾有一个空格&#xff0c;要批量删除掉&#xff0c;然后重命名 在Kimi中输入提示词&#xff1a; 你是一个Python编程专家&#xff0c;要完成一个脚本编写的任务&#xff0c;具体步骤如下&#xff1a; 读取"F:\aivideo"文件夹里面的全…

计算机毕业设计hadoop+spark+hive知识图谱股票推荐系统 股票数据分析可视化大屏 股票基金爬虫 股票基金大数据 机器学习 大数据毕业设计

哈 尔 滨 理 工 大 学 毕业设计中期检查报告 题 目&#xff1a;基于Spark的股票大数据分析及可视化系统 院 系&#xff1a; 计算机科学与技术学院 数据科学与大数据技术 姓 名&#xff1a; 鲍方博 指导教师&…

Locust:用Python编写可扩展的负载测试

Locust&#xff1a;简化性能测试&#xff0c;让负载模拟更直观- 精选真开源&#xff0c;释放新价值。 概览 Locust是一个开源的性能和负载测试工具&#xff0c;专门用于HTTP和其他协议的测试。它采用开发者友好的方法&#xff0c;允许用户使用普通的Python代码来定义测试场景。…

遍历目录

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 遍历在汉语中的意思是全部走遍&#xff0c;到处周游。在Python中&#xff0c;遍历是将指定的目录下的全部目录&#xff08;包括子目录&#xff09;及…

go语言进阶 init() 函数

go 语言包 在一个项目中通常我们需要引入第三方包&#xff0c;我们来看下 当我们导入一个包的时候 发生了什么&#xff1a; 首先我们先详细介绍下两个函数&#xff1a; init(), main() 是 go 语言中的保留函数。我们可以在源码中 定义 init()函数&#xff0c; 此函数会在包导入…

CANopen for Python

系列文章目录 前言 该软件包支持与 CANopen 节点网络交互。 注意 这里的大部分文档都是从 CANopen 维基百科页面上直接盗用的。 本文档正在编写中。欢迎反馈和修改&#xff01; CANopen 是用于自动化领域嵌入式系统的通信协议和设备配置文件规范。根据 OSI 模型&#x…

【背包-BM70 兑换零钱(一)】

题目 BM70 兑换零钱(一) 描述 给定数组arr&#xff0c;arr中所有的值都为正整数且不重复。每个值代表一种面值的货币&#xff0c;每种面值的货币可以使用任意张&#xff0c;再给定一个aim&#xff0c;代表要找的钱数&#xff0c;求组成aim的最少货币数。 如果无解&#xff0c;…

Promed Bioscience—高纯度胶原蛋白

Promed Bioscience——高纯度胶原蛋白供应商 专于研发&#xff0c;忠于质量&#xff0c;创新驱动 AXXORA 作为Enzo life sciences公司的子公司&#xff0c;是欧美最大的生命科学研究信息、服务、销售电子一站式服务平台之一&#xff0c;AXXORA精选欧洲四十多家优秀的生命科学研…

[Algorithm][动态规划][01背包问题][模板 背包][分割等和子集]详细讲解 +何为背包问题?

目录 0.何为背包问题&#xff1f;1.模板 背包1.题目链接2.算法原理详解3.代码实现 2.分割等和子集1.题目链接2.算法原理详解3.代码实现 0.何为背包问题&#xff1f; 背包问题&#xff1a;有限制条件下的"组合问题" 你有一个背包&#xff0c;地上有一堆物品&#xff…

基于zyyo主页与無名の主页合并二改,一款适合新手的个人主页

pengzi主页&#x1f64b; 项目地址 简洁的布局&#xff1a;主页应该有清晰的布局&#xff0c;包括一个简洁的导航菜单和易于浏览的内容区域。避免使用过多的花哨效果&#xff0c;保持页面简洁明了。 个人资料介绍&#xff1a;在主页上展示一段简短的个人介绍&#xff0c;包括…

pikachu靶场(File Inclusion(文件包含)通关教程)

1.File Inclusion(local)本地文件包含 1.1打开网站&#xff0c;发现有个下拉框&#xff0c;随便选择一个&#xff0c;然后点击提交 1.2发现图中有个参数变了&#xff0c;其他的也会变&#xff0c;猜测这里可能有其他隐藏的文件 1.3直接进行抓包 &#xff0c;右键发送到爆破模…

PXE、无人值守实验

PXE部署 [roottest2 ~]# systemctl stop firewalld [roottest2 ~]# setenforce 0一、部署tftp服务 [roottest2 ~]# yum -y install tftp-server.x86_64 xinetd.x86_64 [roottest2 ~]# systemctl start tftp [roottest2 ~]# systemctl enable tftp [roottest2 ~]# systemctl …

《深入浅出LLM 》(一):大模型概念综述

《深入浅出LLM 》&#xff08;一&#xff09;&#xff1a;大模型概念综述 一、大模型概念 大规模语言模型&#xff08;LargeLanguageModels&#xff0c;LLM&#xff09;&#xff0c;也称大规模语言模型或大型语言模型&#xff0c;是一种由包含数百亿以上参数的深度神经网络构建…

Python | Leetcode Python题解之第138题随机链表的复制

题目&#xff1a; 题解&#xff1a; class Solution:def copyRandomList(self, head: Optional[Node]) -> Optional[Node]:allNode[] # 用一个数组存储所有结点cur1headwhile cur1:allNode.append(cur1)cur1cur1.nextnlen(allNode)allRandom[-1]*n # 用一个数组存储所有节点…

Node.js后端构建指南:MongoDB与Express的集成

安装express 安装 Express 并将其保存到依赖列表中&#xff1a; $ cnpm install express --save 以上命令会将 Express 框架安装在当前目录的 node_modules 目录中&#xff0c; node_modules 目录下会自动创建 express 目录。以下几个重要的模块是需要与 express 框架一起安…

开源WebGIS全流程常用技术栈

1 数据生产 1.1 uDig uDig&#xff08;http://udig.refractions.net/&#xff09;是一个基于Java开源的桌面应用框架&#xff0c;它构建在Eclipse RCP和GeoTools&#xff08;一个开源的Java GIS包)上。可以进行shp格式地图文件的编辑和查看&#xff1b;是一个开源空间数据查看…