递增三元组(第九届蓝桥杯)

文章目录

        • 题目
        • 原题链接
        • 思路分析
        • 二分做法1
        • 二分做法2
        • 双指针做法
        • 前缀和解法

题目

在这里插入图片描述

原题链接

递增三元组

思路分析

由时间复杂度可知需要至少优化到 O ( n l o g n ) O(nlogn) O(nlogn)才行
而纯暴力枚举三个数组的话: O ( n 3 ) O(n^3) O(n3)
可以考虑将b[]作为标志,枚举a[]中小于b[i]的和c[]中大于b[i]
既然是查找
这种类型的题目可以想到用二分或者双指针来降低枚举的时间复杂度

二分做法1
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long LL;
const int N = 100010;
int a[N], b[N], c[N];
int n;
bool check_a(int mid, int x) {if(a[mid] < x) return true;else return false;
}
bool check_c(int mid, int x) {if(c[mid] > x) return true;else return false;
}
int main() {cin >> n;for(int i = 1; i <= n; i++) scanf("%d", &a[i]);for(int i = 1; i <= n; i++) scanf("%d", &b[i]);    for(int i = 1; i <= n; i++) scanf("%d", &c[i]);sort(a + 1, a + 1 + n);sort(b + 1, b + 1 + n);sort(c + 1, c + 1 + n);LL res = 0;for(int i = 1; i <= n; i++) {   //以b[]为参照物int st = 0, ed = 0;int la = 1, ra = n, lc = 1, rc  = n;while(la < ra) {int mid = la + ra + 1 >> 1;if(check_a(mid, b[i]))    la = mid;else ra = mid - 1;}if(a[ra] < b[i])     st = ra;while(lc < rc) {int mid = lc + rc >> 1;if(check_c(mid, b[i]))  rc = mid;else lc = mid + 1;}if(c[rc] > b[i])    ed = n - rc + 1;res += (LL)st * ed;}printf("%lld", res);return 0;
}
二分做法2

上方的只需要变动这块就行,直接调用库函数

    for(int i = 1; i <= n; i++) {   //以b[]为参照物int st = 0, ed = 0;int la = 1, ra = n, lc = 1, rc  = n;// while(la < ra) {//     int mid = la + ra + 1 >> 1;//     if(check_a(mid, b[i]))    la = mid;//     else ra = mid - 1;// }// if(a[ra] < b[i])     st = ra;//要想找第一个小于的,那么可用第一个大于等于的-1st = lower_bound(a + 1, a + 1 + n, b[i]) - a - 1;// while(lc < rc) {//     int mid = lc + rc >> 1;//     if(check_c(mid, b[i]))  rc = mid;//     else lc = mid + 1;// }// if(c[rc] > b[i])    ed = n - rc + 1;//找第一个大于的可直接用uppered = n - (upper_bound(c + 1, c + n + 1, b[i]) - c) + 1;res += (LL)st * ed;}
双指针做法
//双指针,只需修改上方为下面这样即可
int l = 1, r = 1;
for(int i = 1; i <= n; ++i) {while(a<=n && a[l] < b[i]) l++;while(c<=n && c[r] <= b[i]) r++;ans += (LL)(l-1)*(n-r+1);
}
前缀和解法

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N = 100010;
int n;
int a[N],b[N],c[N];
int as[N];  //as[N]表示在A[]中有多少个数小于b[i]
int cs[N];  //cs[N]表示在C[]中有多少个数小于b[i]
int cnt[N],s[N]; //s[i]表示1~i之间的数的数量int main()
{cin >> n;long long res = 0;//a,b,c++的目的是为了范围从1开始,以便后续使用前缀和for(int i = 0;i < n;i++)    scanf("%d",&a[i]),a[i]++;for(int i = 0;i < n;i++)    scanf("%d",&b[i]),b[i]++;for(int i = 0;i < n;i++)    scanf("%d",&c[i]),c[i]++;//求as[i]for(int i = 0;i < n;i++) cnt[a[i]]++;    //某个数的数量for(int i = 1;i < N;i++) s[i] = s[i-1] + cnt[i]; //前缀和for(int i = 0;i < n;i++) as[i] = s[b[i] - 1];    //1到b[i]之间的数的数量//求cs[i]memset(cnt,0,sizeof cnt);   //将cnt重置为0memset(s,0,sizeof s);       //将s重置为0for(int i = 0;i < n;i++)    cnt[c[i]]++;for(int i = 1;i < N;i++)    s[i] = s[i-1] + cnt[i];for(int i = 0;i < n;i++)    cs[i] = s[N-1] - s[b[i]];//枚举每个b[i]for(int i = 0;i < n;i++)    res += (long long)as[i] * cs[i];cout << res << endl;return 0;
}

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

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

相关文章

RabbitMQ 交换器

RabbitMQ 交换器 官方例子 http://www.rabbitmq.com/getstarted.html direct 如上图所示&#xff0c;两个队列绑定到了direct交换器上&#xff0c;第一个队列绑定的 binding key 为 orange &#xff0c;第二个队列有两个绑定&#xff0c;分别是 black 和 green 。 如上图所示…

基础小白快速入门web前端开发技术------>web概述

Web概述 我们在编程的学习中&#xff0c;随着学习的深入&#xff0c;我们会理解到WEB这个东西&#xff0c;那么 web究竟是个啥&#xff0c;到底该咋用&#xff1f; web&#xff0c;是网站的英文意思&#xff0c;又被称作“下一代Web3.0&#xff0c;互联网”&#xff0c;是在We…

vue在线查看pdf文件

1.引入组件 npm install --save vue-pdf2、pdf组件页面模板 <template><div class"scrollBox" ><el-dialog :visible.sync"open" :top"1" width"50%" append-to-body><div slot"title"><el…

混沌工程-经典案例分享

目录 前言 案例 1、强弱依赖不合理 2、预案不生效 3、异常数据不兼容 4、监控体系缺陷 5、系统缺整体架构设计 总结 前言 我们公司从启动混沌工程到现在已经几乎覆盖了线上的所有核心业务&#xff0c;先后进行过2000次演练共挖掘出120个漏洞。这些漏洞有些得了及时修复…

DevEco Studio编译时候自动生成js、js.map文件导致项目无法运行

这算是开发工具的bug吧&#xff0c;估计后期能修复。 解决办法&#xff0c;手动删除.js、.js.map文件即可&#xff1b; 文件太多&#xff0c;删除很麻烦&#xff0c;有个大佬写了个插件&#xff0c;可一键删除&#xff1a;ArkCompilerSupport DevEco Studio 运行项目有时会自动…

二叉树进阶leetcode

606. 根据二叉树创建字符串 要点&#xff1a;前序遍历&#xff0c;当左子树为空时&#xff0c;右结点有数字时要给左边加括号 class Solution { public:string tree2str(TreeNode* root) {string s;//创建一个字符串if(rootnullptr){return s;}sto_string(root->val);//保存…

网络、网络协议模型、UDP编程——计算机网络——day01

今天来到了网络编程&#xff0c;主要讲了网络、网络协议模型以及UDP编程 网络 网络主要是进行&#xff1a;数据传输和数据共享 网络协议模型 OSI协议模型应用层 实际发送的数据表示层 发送的数据是否加密会话层 是否建立会话连接传…

调研图基础模型(Graph Foundation Models)

&#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 图基础模型&#xff08;Graph Foundation Models&#xff0c;简称 GFMs&#xff09; 是一种经过预训练的图大模型&#xff0c;旨在处理不同领域的图数据和任务。让我们详细探讨一下这个概念。 Github …

uniapp让输入框保持聚焦状态,不会失去焦点

使用场景&#xff1a;当输入框还有发送按钮的时候&#xff0c;点击发送希望软键盘不消失&#xff0c;还可以继续输入&#xff0c;或者避免因输入图片标签造成的屏闪问题 多次尝试后发现一个很实用的方法&#xff0c;适用input输入框和editor输入框 解决办法&#xff1a;把cli…

AXI4总线解析

一、读地址 AWVALID和AWREADY同时为高时&#xff0c;在这个上升沿&#xff0c;图中黄线&#xff0c;将接下来的数据写入地址40000000中。 在

基于状态机的按键消抖实现

摸鱼记录 Day_14 !(^O^)y review 在day_13中以按键状态判断为例学习了状态分析基于状态机的按键消抖原理-CSDN博客 分析得到了下图&#xff1a; 今日任务&#xff1a;完成此过程 !(^O^)y 小梅哥对应视频&#xff1a; 15B 基于状态机的按键消抖Verilog实现_哔哩哔哩…

DataFunSummit 2023:洞察现代数据栈技术的创新与发展(附大会核心PPT下载)

随着数字化浪潮的推进&#xff0c;数据已成为企业竞争的核心要素。为了应对日益增长的数据挑战&#xff0c;现代数据栈技术日益受到业界的关注。DataFunSummit 2023年现代数据栈技术峰会正是在这样的背景下应运而生&#xff0c;汇聚了全球数据领域的精英&#xff0c;共同探讨现…

Linux 文件操作命令

1 文件与目录操作 cd /home 进入 ‘/home’ 目录 cd .. 返回上一级目录cd ../.. 返回上两级目录cd - 返回上次所在目录cp file1 file2 将file1复制为file2cp -a dir1 dir2 复制一个目录 cp -a /tmp/dir1 . 复制一个…

【Qt】初识Qt

文章目录 一. 行业岗位介绍二. 什么是客户端&#xff1f;三. GUI 开发的各自技术方案四. 什么是框架&#xff1f;五. Qt 的发展史五. Qt 支持的系统六. Qt 的优点 一. 行业岗位介绍 二. 什么是客户端&#xff1f; 既然 Qt 是用来进行客户端开发的&#xff0c;那我们就要了解什…

如何保证ES和数据库的数据一致性?

在业务中&#xff0c;我们通常需要把数据库中的数据变更同步到ES中&#xff0c;那么如何保证数据库和ES的一致性呢&#xff1f;通常有以下几种做法&#xff1a; 双写 在代码中&#xff0c;对数据库和ES进行双写&#xff0c;并且先操作本地数据库&#xff0c;后操作ES&#xff…

Ubuntu20.04安装并配置vscode

Ubuntu20.04安装并配置vscode vscode安装miniconda安装创建虚拟python3.8环境pytorch和匹配的cuda安装 vscode安装 VSCode可以通过 Snapcraft 商店或者微软源仓库中的一个 deb 软件包来安装。 我们这里选用安装VSCode snap版&#xff0c;打开你的终端(CtrlAltT)并且运行下面的…

px2rem实现vue项目响应式布局

第一步 首先需要在项目中安装px2rem插件 npm install postcss-px2rem px2rem-loader --save 第二步 在项目src目录下新建util文件夹&#xff0c;在util文件夹下新建rem.js文件&#xff0c;内容如下&#xff1a; // rem等比适配配置文件 // 基准大小 const baseSize 14 //…

【机器学习300问】27、什么是决策树?

〇、两个预测任务 &#xff08;1&#xff09;任务一&#xff1a;银行预测偿还能力 当前&#xff0c;某银行正致力于发掘潜在的放贷用户。他们掌握了每位用户的三个关键特征&#xff1a;房产状况、婚姻状况以及年收入。此外&#xff0c;银行还拥有过往这些用户的债务偿还能力的…

Linux系统——LVS-DR群集部署及拓展

目录 引言 1.LVS的工作模式及其工作过程 2.列举出LVS调度算法 3.LVS调度常见算法&#xff08;均衡策略&#xff09; 3.1固定调度算法:rr&#xff0c;wrr&#xff0c;dh&#xff0c;sh 3.2动态调度算法:wlc&#xff0c;lc&#xff0c;lblc 4.LVS三种工作模式区别 一、I…

更快更强,Claude 3全面超越GPT4,能归纳15万单词

ChatGPT4和Gemini Ultra被Claude 3 AI模型超越了&#xff1f; 3月4日周一&#xff0c;人工智能公司Anthropic推出了Claude 3系列AI模型和新型聊天机器人&#xff0c;其中包括Opus、Sonnet和Haiku三种模型&#xff0c;该公司声称&#xff0c;这是迄今为止它们开发的最快速、最强…