蓝桥刷题--四元组问题和肖恩的投球游戏加强版

1.四元组问题

我的这个代码有点问题,我也找不出来,哪位大佬指正一下

// 四元组问题
//思路
// 是否存在 a < b < c < d, 使得nums[d] < nums[c] < nums[a] < nums[b]
//分别维护二元组 (a, b) 和 (c, d), 对合法 b 维护前缀 max 的 nums[a], 同理维护 (c, d) 等等, 枚举c即可
//所以 要对每个 b 找到最大的nums[a] 使得a < b且 nums[a] < nums[b] 
#include<bits/stdc++.h>
using namespace std;
using ll = long long;
#define inf 1,000,000,000void solve(const int &Case)
{int n; cin >> n;vector<int> a(n);for(auto &x : a)cin >> x;vector<int> pre(n, (-inf - 1)), suf(n);int mn = (inf + 1);set<int> s; // 前缀的 nums[a] 的值 for (int i = 0;i < n; ++ i){// 找大于等于nums[b] 的 num[a] 中的最小值 auto it = s.lower_bound(a[i]);if(it == s.begin());else {it = prev(it); // 获得小于 nums[b] 的 nums[a] 中的最大值 int p = *it;pre[i] = p; // pre[i] 记录的是合法的 b 的值的nums[a] 的前缀 max }s.insert(a[i]);}for(int i = n - 1;i >= 0; -- i){if(a[i] > mn) // nums[c] > nums[d]{// sud[i] 表示 c = i时是否存在合法的 d 满足 suf[i] = 1;}mn = min(mn, a[i]);}for(int i = 1;i < n; ++ i)pre[i] = max(pre[i - 1], pre[i]);for(int i = 1;i < n - 1; ++ i) // 枚举c = i + 1 {if(pre[i] > a[i + 1] && suf[i + 1]){cout << "YES\n";return;}}cout << "NO\n";
}int main()
{ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);int t = 1;for(int i = 1;i <= t; ++ i)solve(i);return 0;
}

这个是我学的对的

思路:

把四个数的不等式关系降低为3个数的不等式关系,如果我们已经判断num[c]<nums[a]<nums[b]。

那么我们只需要再判断下标c的后面是否存在比nums[c]小的数据。这里我们可以通过另外一个数组min_r来求出每一个num[i]后面的最小值min_r[i]即可。

以下是详细的解题思路:

1.构建一个单调递减栈st存储元素。

栈顶st.top()表示目前的最大值nums[b]。并需要用一个k来不断刷新最大值。

2.依次遍历数组nums,nums[i]表示当前正在遍历第i个元素。

如果栈为空,则入栈;若不为空且nums[i]>st.top(),则弹出栈顶元素

并更新最大值K,直到num[i]>st.top()不成立,最后一次出栈的元素一定是nums[a]。

最后一次出栈时,k为nums[a]的值。

再继续遍历判断nums[i]<k是否成立,若成立,则找到了nums[c]

(此时恰好构成了一个完整的nums[c]<nums[a]<nums[b])

4.判断下标c的后面是否存在一个比nums[c]还要小的数nums[d]

若min_r[i]<nums[c],则返回true

#include<bits/stdc++.h>
using namespace std;bool FoursNumberFind(vector<int>&nums){stack<int>st;int n = nums.size(),k = INT_MIN, INF = INT_MAX;//用min_r[i]来存储num[i]右边的最小值nums[i+1]vector<int>min_r(n,INF);//i的初值为什么是n-2,下标从0开始,范围为0~n-1,因为需要找num[i]右边的最小值nums[i+1]for(int i = n-2;i>=0;--i){min_r[i] = min(min_r[i+1],nums[i+1]);}//用单调栈求下标未nums[c]<nums[a]<nums[b]的情况for(int i = 0;i<n;i++){if(nums[i]<k){if(nums[i]>min_r[i])return true;}while(!st.empty() && st.top()<nums[i]){k = max(k,st.top());st.pop();}st.push(nums[i]);}return false;
}
int main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);int n;cin>>n;vector<int>nums(n);for(int i = 0;i<n;i++) cin>>nums[i];if(FoursNumberFind(nums)) cout<<"YES"<<endl;else cout<<"NO"<<endl;return 0;
}

2.肖恩的投球游戏加强版

样例输入

4 4 2
3 2 9 10
7 2 1 7
10 4 8 4
1 1 2 1
4 1 4 3 1
3 3 4 4 3

样例输出

3 2 9 10 
7 2 1 7 
10 4 11 7 
2 2 6 4 
#include <bits/stdc++.h>
using namespace std;
#define int long long 
const int N = 1000 + 3;
int a[N][N], d[N][N];void solve()
{int n, m, q; cin >> n >> m >> q;for (int i = 1;i <= n; ++ i)for(int j = 1;j <= m; ++ j)cin >> a[i][j]; // 输入for(int i = 1;i <= n; ++ i)for(int j = 1;j <= m; ++ j)d[i][j] = a[i][j] - a[i][j - 1]; // 差分while(q -- ){int x1, y1, x2, y2, c; cin >> x1 >> y1 >> x2 >> y2 >> c;for(int i = x1;i <= x2; ++ i){d[i][y1] += c; // 只取(x1,y1),(x2,y2)d[i][y2 + 1] -= c;}}for (int i = 1;i <= n; ++ i)for(int j = 1;j <= m; ++ j)a[i][j] = a[i][j - 1] + d[i][j]; // 前缀和还原for(int i = 1;i <= n; ++ i)for(int j = 1;j <= m; ++ j)cout << a[i][j] << " \n"[j == m]; // 输出
}signed main()
{ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);solve();return 0;
}

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

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

相关文章

冲刺跑转长跑过程中,新茶饮品牌如何觅增量?

如今&#xff0c;新茶饮行业的发展日趋成熟&#xff0c;并通过资本动作、市场扩张等释放出相关信号。 比如&#xff0c;在资本动作上&#xff0c;IPO已成为新茶饮品牌发展的重要议程。可以看到&#xff0c;截至2023年2月&#xff0c;正在推进港交所IPO的新茶饮企业就有茶百道、…

公司系统中了.rmallox勒索病毒如何恢复数据?

早晨上班时刻&#xff1a; 当阳光逐渐洒满大地&#xff0c;城市的喧嚣开始涌动&#xff0c;某公司的员工们纷纷踏入办公大楼&#xff0c;准备开始新的一天的工作。他们像往常一样打开电脑&#xff0c;准备接收邮件、查看日程、浏览项目进展。 病毒悄然发作&#xff1a; 就在员…

大屏动效合集更更更之实现百分比环形

实现效果 参考链接&#xff1a; https://pslkzs.com/demo/pie/demo1.php 写在最后&#x1f352; 源码&#xff0c;关注&#x1f365;苏苏的bug&#xff0c;&#x1f361;苏苏的github&#xff0c;&#x1f36a;苏苏的码云

Linux系统编程(笔记)

1、认识计算机系统&#xff08;上&#xff09; 1.1、计算机系统由软硬件构成 1.2、总线 1.3、I/O设备 1.4、内存 1.5、处理器 1.6、计算机硬件组成 2、认识计算机系统&#xff08;下&#xff09; 2.1、什么是操作系统 2.2、Linux内核模块 2.3、操作系统管理硬件&#xff08;职…

进程的终止

进程的退出&#xff08;main函数的退出&#xff09; main函数的返回值叫做进程的退出码&#xff0c;该退出码表示进程执行的情况。例如&#xff1a;一个函数返回一个值时&#xff0c;我们要知道函数的执行情况&#xff0c;可以去看函数的返回值。 例子&#xff1a; 1 #include…

【VTKExamples::Points】第五期 ExtractPointsDemo

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ:870202403 公众号:VTK忠粉 前言 本文分享VTK样例ExtractPointsDemo,并解析接口vtkExtractPoints,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步! 你的点赞就是我的动力(^U…

进程优先级

文章目录 一、进程优先级二、查看进程优先级以及修改优先级 一、进程优先级 cpu资源少量&#xff0c;只有一个然而在操作系统中存在很多进程&#xff0c;这些进程访问cpu资源时他们相互之间是存在竞争关系。cpu为了保他们之间的公平&#xff0c;也就存在了优先级&#xff01;那…

NX二次开发——获取当前dll的全路径,上一级路径和名称

在nx二次开发中经常会用到dll的全路径&#xff0c;上一级路径和名称&#xff0c;这里我对其进行封装&#xff0c;方便以后调用。 关键代码&#xff1a; //头文件 #include <Windows.h> #include <atlbase.h>//获取当前dll所在的文件夹(mode:0-全路径名&#xff0…

【DP】第十四届蓝桥杯省赛C++ B组《接龙数列》(C++)

【题目描述】 对于一个长度为 K 的整数数列&#xff1a;A1,A2,...,AK&#xff0c;我们称之为接龙数列当且仅当 的首位数字恰好等于 的末位数字 (2≤i≤K)。 例如 12,23,35,56,61,11 是接龙数列&#xff1b;12,23,34,56 不是接龙数列&#xff0c;因为 56 的首位数字不等于 3…

STM32最小核心板使用HAL库ADC读取MCU温度(使用DMA通道)

STM32自带CPU的温度数据&#xff0c;需要使用ADC去读取。因此在MX创建项目时如图配置&#xff1a; 模块初始化代码如下&#xff1a; void MX_ADC1_Init(void) {/* USER CODE BEGIN ADC1_Init 0 *//* USER CODE END ADC1_Init 0 */ADC_ChannelConfTypeDef sConfig {0};/* USER…

C语言例:设 int x=1,y=3,z; 则执行语句z=x>y?++x:y++; 后,z的值

代码如下&#xff1a; #include<stdio.h> int main(void) {int x1,y3,z; zx>y?x:y; //z(x>y?x:y)//x>y?x:y -->y3 z3printf("z %d\nx %d\ny %d\n",z,x,y); //3 1 4return 0; } 结果如下&#xff1a;

【计算机网络篇】物理层(3)编码与调制

文章目录 &#x1f354;编码与调试⭐基本概念 &#x1f354;基本的带通调制方法和混合调制方法⭐基本的带通调制方法⭐混合调制方法 &#x1f354;编码与调试 物理层是OSI模型中的第一层&#xff0c;它负责在物理媒体上传输原始比特流。在物理层的编码和调试中&#xff0c;我们…

【JS进阶】第二天

JavaScript 进阶 - 第2天 了解面向对象编程的基础概念及构造函数的作用&#xff0c;体会 JavaScript 一切皆对象的语言特征&#xff0c;掌握常见的对象属性和方法的使用。 了解面向对象编程中的一般概念能够基于构造函数创建对象理解 JavaScript 中一切皆对象的语言特征理解引用…

Jmeter多台机器并发请求实现压力性能测试

工作需要开始研究前置服务的压力性能测试&#xff0c;最后选定用jemeter工具&#xff0c;先用本机跑一万个用户&#xff0c;电脑直接蓝屏&#xff0c;通过研究发现当需要模拟数多达上万的并发用户时&#xff0c;使用单台电脑(CPU和内存)可能无法支持&#xff0c;会将程序跑崩溃…

CC-DefineTag:一个简单好用的标签组件,支持自动换行、自适应高度,且可设置行数、标签文字颜色等属性

CC-DefineTag&#xff1a;一个简单好用的标签组件&#xff0c;支持自动换行、自适应高度&#xff0c;且可设置行数、标签文字颜色等属性 摘要&#xff1a; 在前端开发中&#xff0c;标签组件是常见的UI组件之一&#xff0c;用于显示一组相关的标签。然而&#xff0c;传统的标签…

半路出家嵌入式可行吗?

最近看到一个提问&#xff0c;原话如下&#xff1a; 我是一个211电子信息23届硕士毕业生&#xff0c;中间转码了去搞了前端&#xff0c;硕士期间也有过几个大厂实习&#xff0c;然后找工作时手头上有20&#xff0c;30的工作&#xff0c;但最后选择时基于稳定性考虑还是选了家这…

Springboot+vue的医疗挂号管理系统+数据库+报告+免费远程调试

效果介绍: Springbootvue的医疗挂号管理系统&#xff0c;Javaee项目&#xff0c;springboot vue前后端分离项目 本文设计了一个基于Springbootvue的前后端分离的医疗挂号管理系统&#xff0c;采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;con…

【Java Web基础】一些网页设计基础(五)

文章目录 1. 图片在盒子内部垂直居中2. 底部设计&#xff0c;图片或子元素居中于父盒子&#xff08;水平、垂直&#xff09;&#xff0c;随着屏幕大小放大或缩小3. 使用thymeleaf的th:each会导致样式失效错乱问题 1. 图片在盒子内部垂直居中 用弹性盒子实现垂直居中及用css实现…

用 Open-Sora 高效创作视频,让创意触手可及

近年来&#xff0c;视频内容以爆炸式增长席卷了我们的生活。从短视频平台到直播带货&#xff0c;视频正成为人们获取信息和娱乐的主要方式。然而&#xff0c;传统视频制作流程往往耗时费力&#xff0c;对于普通用户来说门槛较高。 为了降低视频创作门槛&#xff0c;让更多人享…

无人机自动返航算法实现与优化

一、引言 随着无人机技术的快速发展&#xff0c;其在航拍、农业、救援等领域的应用越来越广泛。在这些应用中&#xff0c;无人机的自动返航功能显得尤为重要。一旦无人机失去控制或与遥控器失去连接&#xff0c;自动返航算法能够确保无人机安全返回起飞点&#xff0c;避免损失和…