LOJ 数列分块入门 6
2024-09-08 18:54:42
\(\text{Solution}\)
涉及到插入,分块需要动态维护块内的元素及相对位置
于是妙用 \(\text{vector}\)
学到了 \(insert\) 操作,在某个迭代器前插入元素
这样我们对元数列分块,块长 \(\sqrt n\)
每个块用 \(\text{vector}\) 维护
插入时一块一块地找到合适块的合适位置,用 \(insert\) 插入容器(复杂度与插入位置到末元素长度线性相关)
\(\text{Solution}\)
#include <cstdio>
#include <vector>
#include <cmath>
#define re register
using namespace std;
const int N = 1e5 + 5;
int n, a[N], st[N], ed[N], id[N];
vector<int> Q[N];
inline void prepare()
{
int num = sqrt(n);
for(re int i = 1; i <= num; i++)
{
st[i] = ed[i - 1] + 1, ed[i] = (i == num ? n : ed[i - 1] + n / num);
for(re int j = st[i]; j <= ed[i]; j++) id[j] = i;
}
for(re int i = 1; i <= n; i++) Q[id[i]].push_back(a[i]);
}
inline void Insert(int x, int v)
{
int cur = 0, p = 0;
while (cur < x) cur += Q[++p].size();
Q[p].insert(Q[p].begin() + Q[p].size() - cur + x - 1, v);
}
inline int Query(int x)
{
int cur = 0, p = 0;
while (cur < x) cur += Q[++p].size();
return Q[p][Q[p].size() - cur + x - 1];
}
int main()
{
scanf("%d", &n);
for(re int i = 1; i <= n; i++) scanf("%d", &a[i]);
prepare();
for(re int i = 1, op, l, r, c; i <= n; i++)
{
scanf("%d%d%d%d", &op, &l, &r, &c);
if (!op) Insert(l, r);
else printf("%d\n", Query(r));
}
}
最新文章
- Android APK是否需要预解压
- struts2+spring的两种整合方式
- css content 如何自定义生成图标?
- Cookie实现商品浏览记录--方式一:Java实现
- java异常处理:建立exception包,建立Bank类,类中有变量double balance表示存款,Bank类的构造方法能增加存款,Bank类中有取款的发方法withDrawal(double dAmount),当取款的数额大于存款时,抛出InsufficientFundsException,取款数额为负数,抛出NagativeFundsException,如new Bank(100),
- uva 12003 分块
- css3写出0.5px的边框
- 文件上传利器SWFUpload入门简易教程
- 在SQL Server 2014下面使用的SQL2000的Northwind和Pubs示例数据库
- 每天一道LeetCode--342. Power of Four
- http cookie
- 初入Android--环境搭建
- php调用webservice的几种方法
- 使用spol导出exce
- Spring MVC入门讲解
- 【转】Kali更新源
- C# string 常用功能的方法扩展
- mysql插入数据会变中文
- CSS3 transition 属性过渡效果 详解
- The more... the more句型
热门文章
- typora实现多平台发布文章
- Linux deb系统 nginx 配置解析php
- 面试官:介绍一下 Redis 三种集群模式
- 【Java SE】Day02 数据类型转换、运算符、方法入门
- JAVA里Map的一些常用方法
- meta标签补充
- Ubuntu20.04 Java相关环境(JDK、Mysql、Redis、nacos、influxdb)部署以及运行
- formly-form 动态表单
- Django项目启动 AttributeError: ‘str‘ object has no attribute ‘decode‘ 问题
- uniapp微信小程序 原生底部导航栏