事先声明 代码是 @滑稽_ωノ (河北King 芜湖~)
目录
前言:
- 前言:
- 思路
- 总结
- C++(1400ms 自己写的话应该是300 - 500 ms)
区间和 ? RMQ,线段树,树状数组,前缀和 ? (卧槽 这个数据范围好大 —>离散化)
(怎么离散化 map? 然后每次都标记 太慢了吧)
思路-
先将 原来的 x 存入到数组里面
-
再将 需要查询的 数组也 插入到这个数组里面 (当然二分处理的好 也可以不用 只是方便理解)
-
然后对这个数组 进行排序 和 去重
-
然后就前缀和 (不过需要对sum 数组 先加c[i])
-
最后查询的时候 直接sum[r] - sum[l-1] 即可
不过为了 减少时间 所以 我们 每次 查询 离散化的表的时候 都用二分 进行查询
总结也就是离散化的操作 难懂 但是自己过一遍也就 都懂了
就是将 大且散的 坐标x 用 一个数组存 然后排序(使得能和x坐标一样)
然后用二分 进行查询就行
C++(1400ms 自己写的话应该是300 - 500 ms)#include
using namespace std;
const int N = 4e5+10;
vector v;
int find(int x)
{
return lower_bound(v.begin(),v.end(),x) - v.begin();
/// 第一个大于等于
/// upper 第一个大于
}
int n,m;
int x[N],c[N],l[N],r[N],sum[N];
void solve()
{
cin>>n>>m;
for(int i = 0 ;i>x[i]>>c[i];
v.push_back(x[i]);
}
for(int i=0;i>l[i]>>r[i];
v.push_back(l[i]);
v.push_back(r[i]);
}
v.push_back(-2e9);
sort(v.begin(),v.end());
///删除连续重复的值
v.erase(unique(v.begin(),v.end()),v.end());
for(int i =0 ;i
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?