- 首先输入数,记录其位置。
- 接着把这些数整理好
- 采用数轴上数的位置间接映射到数组下标的方法。//离散化
- 对这些在整理到a数组上的数,求前缀和。
(为什么要整理换一种映射方法,而不是 数轴上数的位置直接映射到数组下标呢,因为这些数的位置范围大,如果采用直接映射,用数组来存储这些数,那么数组会过大)
/*
n组成对的数,数值及其位置,用PII类型的vector add存
m组询问,也是成对的数,左右端点,也用PII类型的vector query存
把这些数整理好PS:整理就是将其去重后排序unique、erase、sort
将这些数存到一个数组a[N]里面
PS:求alls中每个数的位置离散化之后的值(即间接映射到数组下标)
即每个数的位置借助其数值find其对应下标
借该数数值判断,改变下标,找到一个大于等于其数值的最小的数,从而得到x对应下标;
找到后将数值插入到对应下标
再对a[N]求前缀和s[N]
*/
#include <iostream>
#include <vector>
#include <algorithm>
int main()
{
int n,m;
cin>>n>>m;
for(int i = 0;i<n;i++)
{
return 0;
}
区间合并
goal:
样例模拟:
算法思路:
1、所有区间按左端点排序
2、有一个当前区间
把所有区间从前往后扫描,找第i个区间与当前区间关系:
区间内、有交集、无交集
每种情况对所维护区间的影响 :
当前区间添上一部分
新的当前区间