一.7acw离散化

离散化就是将无限空间中的值映射到有限的空间内,去提高算法的时空复杂度。

什么时候会用到离散化呢? 当一个非常大的数组需要开,但是操作的数特别少,就可一使用离散化,将间隔很大的点,映射到相邻的数组元素中,增加空间的利用。

就是大序列只要用很少,映射成小数组。用小数组来弄东西

 输入样例:

 3 3
1 2
3 6
7 5
1 3
4 6
7 8

 输出样例:

8
0
5

find:>=x的最小的一个数

main:

alls存离散化之后的值

加入到离散化

读入区间,下表都放到alls里面

alls去重:排序,离散化后重的放到后面,删掉

                unique函数删掉重复的,新数组放前面,返回的是新数组最后一个

 auto:离散化坐标加上这个数

前缀和

查询

补:unique函数返回一个迭代器,也是一个双指针算法。什么样的拿出来1.第一个2.a[i]!=a[i-1]

      第一个指针遍历所有数,第二个存。j<=i

别人:在这里插入图片描述

这段代码是一个二分查找的实现,用于找到一个数组中第一个大于等于给定值x的数的下标。

首先,给定的输入是一个未经离散化处理的数组alls,以及两个空的向量p和q。

函数find的参数x表示要查找的值。

函数中的变量l和r分别表示数组的左边界和右边界,初始时l为0,r为数组的长度减1。

while循环用于进行二分查找,当l小于r时,循环继续执行。

在循环内部,首先计算出中间值mid,使用位运算(右移1位)来实现除以2的操作。

然后,比较中间值对应的数组元素alls[mid]与给定值x的大小关系。

如果alls[mid]大于等于x,说明要找的数在数组的左半部分,将右边界r更新为mid。

如果alls[mid]小于x,说明要找的数在数组的右半部分,将左边界l更新为mid+1。

循环继续执行,直到l等于r时,循环结束。

最后,返回变量r作为查找结果,即第一个大于等于给定值x的数在数组中的下标。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值