递增三元组 多种做法

C语言开发完整代码接项目给定三个序列A、B、C,长度均为n,且均为无重复元素的递增序列,请设计一个时间上尽可能高效的算法,逐行输出同时存在于这三个序列中的所有元素。例如,数组A为1,2,3},数组B为 【代码】C语言开发完整代码接项目给定三个序列A、B、C,长度均为n,且均为无重复元素的递增序列,请设计一个时间上尽可能高效的算法,逐行输出同时存在于这三个序列中的所有元素。例如,数组A为1,2,3},数组B为。 阅读详情

 

第一种做法:前缀和  O( n )

第二种做法:排序+二分  O(nlgn)

前缀和

空间换时间

#include<bits/stdc++.h>
using namespace std;
const int N = 100010;

int a[N], b[N], c[N];
int cnta[N], cntc[N];
//cnta数组含义: cnta[i] a中i出现的次数
int main()
{
	int n;cin >> n;
	for (int i = 1;i <= n;i++)
		cin >> a[i],a[i]++;
	for (int i = 1;i <= n;i++)
		cin >> b[i],b[i]++;
	for (int i = 1;i <= n;i++)
		cin >> c[i],c[i]++;
	
	for (int i = 1;i <= n;i++)
		cnta[a[i]]++, cntc[c[i]]++;

	for (int i = 1;i <= N;i++)
	{//这里ABC数组里最大值时10的五次方
		cnta[i] += cnta[i - 1];
		cntc[i] += cntc[i - 1];
	}
	long long sum = 0;
	for (int i = 1;i <= n;i++)
		sum += (long long)cnta[b[i]-1] * (cntc[N-1]-cntc[b[i]]);
//sum += (long long)cnta[b[i]-1] * (n-cntc[b[i]]);//也可以这样写
	cout << sum;
	system("pause");
}

二分+排序 

这里的二分还得处理特殊情况 (  if (a[l] >= x) l = 0; 根据结果的正确性返回一个值 )

#include<bits/stdc++.h>
using namespace std;
const int N = 100010;
int a[N], b[N], c[N];
int n;
int find(int x)
{
	int l = 1;int r = n;
	if (a[l] >= x) l = 0;

	while (l < r)
	{

		int mid = l + r + 1 >> 1;
		if (a[mid] < x) l = mid;
		else r = mid - 1;
	}
	return l;//返回下标
}

int find2(int x)
{
	int l = 1;int r = n;
	if (c[r] <= x) l = n+1;

	while (l < r)
	{

		int mid = l + r  >> 1;
		if (c[mid] > x) r = mid;
		else l = mid + 1;
	}
	return l;//返回下标
}


int main()
{
	cin >> n;
	for (int i = 1;i <= n;i++)
		cin >> a[i];
	for (int i = 1;i <= n;i++)
		cin >> b[i];
	for (int i = 1;i <= n;i++)
		cin >> c[i];
	sort(a+1, a + n+1);
	sort(c+1, c + n+1);


	long long sum = 0;
	for (int i = 1;i <= n;i++)
	{
		sum = sum + (long long)find(b[i]) * (n+1-find2(b[i]));

	}
	cout << sum;
	system("pause");
}

 二分统一形式👇

#include<bits/stdc++.h>
using namespace std;
const int N = 100010;
int a[N], b[N], c[N];
int n;
int find(int x,int a[])
{
	int l = 1;int r = n;
	if (a[l] >= x) l = 0;

	while (l < r)
	{

		int mid = l + r + 1 >> 1;
		if (a[mid] < x) l = mid;
		else r = mid - 1;
	}
	return l;//返回下标
}


int main()
{
	cin >> n;
	for (int i = 1;i <= n;i++)
		cin >> a[i];
	for (int i = 1;i <= n;i++)
		cin >> b[i];
	for (int i = 1;i <= n;i++)
		cin >> c[i];
	sort(a + 1, a + n + 1);
	sort(c + 1, c + n + 1);


	long long sum = 0;
	for (int i = 1;i <= n;i++)
	{
		sum = sum + (long long)find(b[i],a) * (n  - find(b[i]+1,c));

	}
	cout << sum;
	system("pause");
}

直接调用upper_bound 和lower_bound

#include<bits/stdc++.h>
using namespace std;

typedef long long LL;
const int N = 1e5 + 10;
int num[3][N];

int main() {
    int n;
    scanf("%d", &n);
    for (int i = 0; i < 3; ++i)
        for (int j = 1; j <= n; ++j)
            scanf("%d", &num[i][j]);
    for (int i = 0; i < 3; ++i)
        sort(num[i] + 1, num[i] + n + 1);

    LL ans = 0;
    for (int i = 1; i <= n; ++i) {
        int key = num[1][i];
        //A中二分查找第一个小于key的数的下标
        int pos1 = lower_bound(num[0] + 1, num[0] + n + 1, key) - num[0] - 1;
        //C中二分查找第一个大于key的数的下标
        int pos2 = upper_bound(num[2] + 1, num[2] + n + 1, key) - num[2];
        if (pos1 >= 1 && pos2 <= n) {
            ans += (LL)pos1 * (n - pos2 + 1);
        }
    }
    cout << ans << endl;
    system("pause");
    return 0;
}

二分模板

 模板还是要记住的,毕竟上面的那个函数只能处理大于等于 不等价于这里的check

如何记忆理解:对于如何判断用r=mid or l=mid

我们不妨先从左到右遍历一下区间 并代入l=mid 与check 的条件 判断是否会筛去我们想要的结果值。若筛去了,则从右到左遍历区间  并代入r=mid 与check的条件 判断是否会筛去(若前者筛去了这里就不会筛去了)

字符串转数字 

外加一个“2019”字符串转数字 2019的方法 (stoi 也可以

int x=0;
for( i = 0 ; i < s.size() ; i++ )
    x=x*10 + str[i]-' 0 '; 

2018年 第9届 蓝桥杯 Java B组 省赛真题详解及总结 2018年 第9届 蓝桥杯 Java B组 省赛真题详解及总结 一、第几天 二、方格计数 三、复数幂 测试 测试——输出到文件 解法一 解法二 四、测试次数 解法一 解法二 五、快速排序 六、递增三元组 解法一 解法二 七、螺旋折线 八、日志统计 九、全球变暖 十、堆的计数 小结 竞赛大纲 竞赛大纲A01_有n个孩子站成一圈 竞赛大纲A02_信用卡号验证 竞赛大纲A03_砝码称重 竞赛大纲A03_砝码称重2 竞赛大纲A03_砝码称重3 阅读详情

相关推荐

【UE5】多用户协同编辑实战:从配置到实时协作

本文详细介绍了在虚幻引擎5中配置和使用多用户协同编辑功能的完整流程。从启用Multi-User Editing插件、配置UDP Messaging网络通信,到启动服务器、创建会话并实现实时协作,提供了从环境准备到实战协作的清晰指南。文章还分享了资产同步、场景分批、对象锁定等实用技巧,并强调了网络配置与版本一致性等关键避坑点,旨在帮助中小型团队提升关卡设计和原型开发的协作效率。

weixin_29001683的博客 267

递增三元组(超详解)(三种做法)

思路:由于a数组与c数组的取值都受b数组影响,所以可以枚举b【I】,然后在枚举a数组有多少个数小于b[i],c数组中有多少数大于b[i],则当前b[i]合法方案为[c中大于b[i]个数乘a中小于b[i]的个数],可以通过前缀和或二分或双指针去找到小于b[i]的第一个数,大于b[i]的第一个数 1.前缀和 #include<iostream> #include<cstdio> #include<algorithm> #include<cstring> usin

qq_51010640的博客 4692

别再只用GWR了!用Python的mgtwr包搞定时空地理加权回归(GTWR)实战

本文详细介绍了如何使用Python的mgtwr包进行时空地理加权回归(GTWR)实战,突破传统GWR模型的局限。通过核心差异解析、实战全流程演示和进阶技巧,帮助读者掌握GTWR在房价波动、污染物扩散等时空数据分析中的应用,提升模型预测精度。

weixin_30899023的博客 341

AcWing 1236:递增三元组

题目入口 题目跳转 题目描述 给定三个整数数组 A=[A1,A2,…AN], B=[B1,B2,…BN], C=[C1,C2,…CN], 请你统计有多少个三元组 (i,j,k) 满足: 1.1≤i,j,k≤N 2.Ai<Bj<Ck 输入格式 第一行包含一个整数 N。 第二行包含 N 个整数 A1,A2,…AN。 第三行包含 N 个整数 B1,B2,…BN。 第四行包含 N 个整数 C1,C2,…CN。 输出格式 一个整数表示答案。 数据范围 1≤N≤1e5 0≤Ai,Bi,Ci≤1

Zuobf_bk的博客 526

【python】geopandas库安装出现各种问题?可以看看这篇文章

geopandas的安装方法

jgsecurity的博客 3887

别再只看图了!代谢组学OPLS-DA分析,R2Y和Q2Y到底怎么看才不踩坑?

本文深入解析代谢组学OPLS-DA分析中的关键指标R2Y和Q2Y,揭示如何避免过拟合陷阱。通过详细解读模型解释能力(R2Y)和预测能力(Q2Y),结合置换检验方法,提供完整的模型评估流程与实战建议,帮助研究者获得可靠的分析结果。

weixin_42638178的博客 196

递增三元组

递增三元组 题目描述 核心思路 解法1:二分算法 我们可以给A,B,CA,B,CA,B,C都先排好序,然后固定枚举BBB的每一个元素,然后用二分法,找出AAA中小于当前枚举的元素B[i]B[i]B[i]的数的个数,设有xxx个,找出CCC中大于当前枚举的元素B[i]B[i]B[i]的数的个数,设为yyy个,那么由乘法原理,对于枚举的B[i]B[i]B[i]这个来说,就有x∗yx*yx∗y个递增三元组,依次类推,知道枚举完BBB中的元素,累加答案即可。 解法2:前缀和 我们用数组ca[]ca[]ca[]来

qq_45832461的博客 492

Oracle数据库安装及配置(Oracle19c)

Windows 10安装Oracle 19c教程

weixin_69200200的博客 2万+

[蓝桥杯][2018年第九届真题] 递增三元组、螺旋折线、日志统计、全球变暖、乘积最大

个人题解链接,历届试题,正在更新中~ 题目目录递增三元组螺旋折线日志统计全球变暖乘积最大 递增三元组 给定三个整数数组 A = [A1, A2, … AN], B = [B1, B2, … BN], C = [C1, C2, … CN], 请你统计有多少个三元组(i, j, k) 满足: 1 <= i, j, k <= N Ai < Bj < Ck 【输入格式】 第一行包含一个整数N。 第二行包含N个整数A1, A2, … AN。 第三行包含N个整数B1, B2, … BN。 第

xuxiaobo1234的博客 382

【Matlab算法】MATLAB实现的语音信号降噪算法(附MATLAB完整代码)

语音信号降噪是语音处理领域中的一个关键问题。在实际应用中,语音信号常常被各种环境噪声污染,这不仅影响了语音的质量,还可能导致后续处理(如语音识别)的性能下降。因此,开发有效的降噪算法对于提高语音通信质量、改善语音识别系统性能等具有重要意义。 本文将介绍并实现两种经典的语音信号降噪算法:谱减法和维纳滤波。这两种方法都是基于频域处理的技术,具有实现简单、计算效率高的特点。通过MATLAB实现这些算法,我们可以直观地比较它们的性能和降噪效果。

Albert_Lsk的博客 1329

银行一表通监管报送系统详解

国家金融监管总局对于“一表通”的总体描述为:通过建立一套明细级、标准化的数据体系和汇总计算规则,将银行机构传送至监管可信区的业务明细数据汇总生成财务指标、监管指标和监管报表,大幅提升监管数据时效性,统一数据标准,实现数据间的穿透和整合,同时改变机构多头报送数据模式,减轻机构报送负担。

银行信息系统应用架构详解 2517

平日小算法笔记 (1) 前缀和求递增三元组

2018.4.3 遇到一个很有意思的题目 题目:递增三元组 给定三个整数数组  A = [A1, A2, … AN],  B = [B1, B2, … BN],  C = [C1, C2, … CN],  请你统计有多少个三元组(i, j, k) 满足:  1. 1 &lt;= i, j, k &lt;= N  2. Ai &lt; Bj &lt; Ck 【输入格式】  第一行包含一个整数N...

Fluence_YHL 489

论文必备 - YOLOv11热力图可视化,支持指定模型,指定显示层,设置置信度,以及10种可视化实现方式

本文带来的是YOLOv11热力图可视化功能,支持,以及。我们经常看到一些论文里绘制了不同的热力图,一方面能够直观的感受其模型的有效性,另一方面也丰富了论文内容。特别是在使用了注意力模块的网络中,热力图就可以验证注意力机制是否真正聚焦到了预期的重要特征上,以便对模型的有效性和合理性进行评估。例如这篇文章中展示的,就很能够表达作者改进后的模型相比之前模型的优越性。

Limiiiing的博客 5504

c++ 数组内是否存在递增三元组

#include <iostream> #include <utility> #include <string> #include <cstring> #include <vector> #include <map> #include <set> #include <stack> #include <queue> #include <unordered_map> #include <

qq_34179431的博客 238

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

递增的三元子序列:双指针贪心算法解析

摘要 本文介绍了一种使用贪心算法检测数组中是否存在递增三元子序列的解决方案。

✨ 欢迎来到【Seal ^_^ 的优快云博客】!✨ 8282

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

【数据结构和算法】递增的三元子序列

给你一个整数数组nums,判断这个数组中是否存在长度为3的递增子序列。 如果存在这样的三元组下标(i, j, k)且满足i < j < k,使得nums[i] < nums[j] < nums[k],返回true;否则,返回false。

船到桥头自然直 1925

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

2022年寒假训练赛第2场

A:a碟的棋盘 题目描述 a碟家里有一副国际象棋,他发现国际象棋的棋盘是黑白相间的。 国际象棋的棋盘是8*8大小的,不过他现在想让你打印出一个n(n为偶数)的国际象棋棋盘。 我们用字符’1’表示黑格,'0’表示白格。 棋盘左上角的格子为白格 规定与白格相邻的格子全部为黑格,与黑格相邻的格子全部为白格。 #include<bits/stdc++.h> using namespace std; #define ll long long int main(){ int n; w

qq_52139055的博客 3387

Leetcode.334. 递增的三元子序列__从暴力到贪心/双向查找

334. 递增的三元子序列 给你一个整数数组 nums ,判断这个数组中是否存在长度为 3 的递增子序列。 如果存在这样的三元组下标 (i, j, k) 且满足 i < j < k ,使得 nums[i] < nums[j] < nums[k] ,返回 true ;否则,返回 false 。 示例 1: 输入:nums = [1,2,3,4,5] 输出:true 解释:任何 i < j < k 的三元组都满足题意 示例 2: 输入:nums = [5,4,3,2,1]

xiangguang_fight的博客 487

2020年3月蓝桥杯(软件类)第一次模拟赛:题目+解答

第一题 单位变换 题目 【问题描述】 在计算机存储中,15.125GB是多少MB? 【答案提交】 这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。 思路 1G=1024M 答案 15488 第二题 约数个数 题目 【问题描述】 1200000有多少个约数(只计算正约数)。 【答案提交】 这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。 思路 枚举+检

不积跬步,无以至千里! 8141

2018年蓝桥杯软件B组省赛试题(部分)

文章目录第几天(简单计算)明码(STL专题之bitset)乘积尾零(思维,简单计算)快速排序(找第k小的数)递增三元组(STL专题之二分的应用)螺旋折线(思维,数学)日志统计全球变暖乘积最大 第几天(简单计算) 明码(STL专题之bitset) 这一个题的意思就是把题目中所给的数字变成二进制的码来表示,然后每两个数字的码是在一排的. #include&amp;amp;lt;iostream&amp;amp;gt; #...

Sun 2088

蓝桥杯第九届(C/C++B组)题目汇总及解析

一、A.第几天 二、B.明码 三、C.乘积尾零 四、D.测试次数 五、E.快速排序 六、F.递增三元组 七、G.螺旋折线 八、H.日志统计 九、I.全球变暖 十、J.乘积最大...

sinat_41233888的博客 1466

Golang每日一练(leetDay0115) 重新安排行程、递增的三元子序列

332. 重新安排行程 Reconstruct Itinerary🌟🌟🌟   334. 递增的三元子序列 Increasing Triplet Subsequence🌟🌟

汉阳Hann's Home 1030

稀疏矩阵三元组顺序表:从原理到C语言实现与优化

在计算机科学中,数据结构是高效管理数据的基础。面对海量数据,尤其是包含大量零值的稀疏数据,传统二维数组会因存储冗余和计算浪费而成为性能瓶颈。稀疏矩阵正是为解决此问题而生的核心概念,其核心原理是通过仅存储非零元素及其位置信息,实现极致的空间压缩。三元组顺序表作为稀疏矩阵最经典的压缩存储结构之一,通过(行、列、值)的三元组数组,在节省 内存 的同时,为矩阵运算提供了 算法 基础。其技术价值在于以结构化的方式平衡了存储效率与运算性能,是理解更复杂压缩格式(如CSR、CSC)的基石。该结构广泛应用于科学计算(如

weixin_33749242的博客 412

小练练练习

递增三元组 给定三个整数数组 A=[A1,A2,…AN], B=[B1,B2,…BN], C=[C1,C2,…CN], 请你统计有多少个三元组 (i,j,k) 满足: 1≤i,j,k≤N Ai<Bj<Ck 输入格式 第一行包含一个整数 N。 第二行包含 N 个整数 A1,A2,…AN。 第三行包含 N 个整数 B1,B2,…BN。 第四行包含 N 个整数 C1,C2,…CN。 输出格式 一个整数表示答案。 数据范围 1≤N≤105, 0≤Ai,Bi,Ci≤105 **思路:**由于数据范围是

qq_50629351的博客 572
上一篇: L2-039 清点代码库
下一篇: 四平方和 哈希与二分做法
他不是混子QAQ
博客等级 码龄5年 107粉丝 161原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值