摘要:
原题链接 题解 找出右端点大于等于当前区间的左端点且左端点小于等于当前区间的右端点的所有区间,由于查询前这样的区间具有单调性,所以可以用二分,但是怎么快速删除呢? 欸stl大法来了,用set存储区间,查找和删除和添加都是 \(logn\) 级的 code #include<bits/stdc++.h 阅读全文
posted @ 2024-04-17 21:27
纯粹的
阅读(22)
评论(0)
推荐(0)
摘要:
原题链接 题解 ,太不容易了 \(a_i!=a_j\) 所以对于每一个数而言,最多有两个配对,最少有一个配对。即排序之后,前后哪个离自己更近就和谁配对 \((x,y)!=(y,x)\) 把配对看成区间 令 \(tree[i]\) 代表有多少个区间的左端点大于 \(i\) 把查询按右端点排序,顺序遍历 阅读全文
posted @ 2024-04-17 15:42
纯粹的
阅读(72)
评论(0)
推荐(0)
摘要:
原题链接 题解 1.由于每个点最多修改6次,所以我们可以暴力循环遍历所有点进行修改。然后可以把无需再修改的点跳过,即并查集,指向右端第一个仍然需要修改的值的下标 这样就是单点修改加区间查询,树状数组 时间复杂度 \(6·n·log(n)\)(单点修改)+ \(m·2·log(n)\) (区间查询) 阅读全文
posted @ 2024-04-17 12:11
纯粹的
阅读(33)
评论(0)
推荐(0)

浙公网安备 33010602011771号