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

文章目录

        • 题目
        • 原题链接
        • 思路分析
        • 二分做法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 。 如上图所示…

Java引用类型

目录 什么是引用类型 引用类型的特点 引用类型有哪些 什么是引用类型 引用类型(reference type)是编程语言中用于表示对象或集合的一种数据类型。与基本数据类型不同,引用类型存储的是对实际数据的引用(或指针),而不是数据本身。这意味着,当操作一个引用类型变量时,…

常用算法部分

学习地址 二 算法 10 搜索 10.1 二分查找 11 排序 12 分治 13 回溯 14 动态规划 15 贪心

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

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

学Python如此简单--OS模块

&#xff08;未完成&#xff09; 模块方法 OS模块 方法说明chdir(path)修改当前工作目录 os.chdir("c:\")------os.chdir("..") ,一般不会更改curdir获取当前目录 属性 注意返回的是相对路径 &#xff08;绝对路径os.path.abspath(os.curdir)&#xff0…

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 …

详解openGauss客户端工具gsql的高级用法

前言&#xff1a; gsql是openGauss提供在命令行下运行的数据库连接工具&#xff0c;可以通过此工具连接服务器并对其进行操作和维护&#xff0c;除了具备操作数据库的基本功能&#xff0c;gsql还提供了若干高级特性&#xff0c;便于用户使用。 gsql的基本功能 连接数据库&…

https 加密解密过程是什么?

HTTPS 加密通信过程中&#xff0c;主要涉及到以下几个步骤&#xff1a; 握手阶段(handshake phase)&#xff1a; 客户端向服务器端发送一个加密通信请求&#xff0c;并提供自己的加密能力列表&#xff0c;以及一个随机生成的密钥&#xff08;Pre-master secret&#xff09;。…

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实现_哔哩哔哩…

springboot/ssm图书管理系统Java图书馆图书统计系统web

springboot/ssm图书管理系统Java图书馆图书统计系统web 基于springboot(可改ssm)vue项目 开发语言&#xff1a;Java 框架&#xff1a;springboot/可改ssm vue JDK版本&#xff1a;JDK1.8&#xff08;或11&#xff09; 服务器&#xff1a;tomcat 数据库&#xff1a;mysql …

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 . 复制一个…

nginx作为tcp的负载均衡

背景&#xff1a; 之前总以为nginx只能当静态资源web容器和web的负载均衡&#xff0c;现在才知道原来也可以当tcp的负载均衡。现在我们项目测试服就是一个nginx对应了2个测试服的负载均衡。配置如下: [rootlocalhost conf]# cat nginx.conf#user nobody; worker_processes …