2月20日总结

文章介绍了如何通过C语言中的map数据结构,统计数组A中每个元素减去常数C后的值(B)出现次数,利用map的快速查找和唯一键特性优化算法效率。
摘要由CSDN通过智能技术生成

P1102 A-B 数对

通过map记录每个A出现的次数,数组a记录每个A减去C,即B,然后通过循环找出B出现的次数并累加。

#include<bits/stdc++.h>
using namespace std;
int main(){
    long long n,c,num=0;
	cin>>n>>c;
	long long a[200005];
	map<long long,long long> b;
	for(long long i=0;i<n;i++){
		cin>>a[i];
		b[a[i]]++;
		a[i]-=c;
	}
	for(long long i=0;i<n;i++){
		if(a[i]<0) continue;
	    num+=b[a[i]];
	}
	cout<<num;
    return 0;
}

map 用于存储键-值对。map 中的每个元素都是一个键值对,其中键是唯一的,它们以升序的方式被排列。

主要作用和特点包括:

快速查找: 由于 map 内部的数据结构是有序的,可以利用二分查找的特性快速定位键,因此查找操作的时间复杂度为 O(log n)。

唯一键: map 中的键是唯一的,这意味着每个键只能对应一个值。如果插入了已存在的键,会更新对应的值。

自动排序: map 中的元素默认按键的升序顺序排列。这是因为 map 内部使用平衡二叉搜索树来维护元素,确保插入新元素和搜索已有元素的高效性。

动态增长: map 可以根据需要动态增长,没有固定大小的限制。.

键值对应关系: map 提供了键值对应关系的存储,可以方便地根据键查找对应的值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值