LOJ 数列分块入门6

题目:

  • 题目

题解:

  • 我都不懂这题为什么要用分块... ...
  • 直接vector就好了...
  • 但是如果有区间修改的话就不行了。所以这题是启示我们也可以动态分块。具体就是每次插入时先找到位置所在的块,再暴力插入,把块内的其它元素直接向后移动一位。如果对于一个块插入过多元素时,需要重构(重新分块),从而使分块拥有更高的性能。
#include <iostream>
#include <cstdio>
#include <cmath>
#include <vector>
#define N 2000005
using namespace std;vector<int> a;
struct Blo {int l, r;} blo[N];
int n, num, size;
int bel[N];int read() {int x = 0, f = 1; char c = getchar();while (c < '0' || c > '9') {if (c == '-') f = -1; c = getchar();}while (c >= '0' && c <= '9') {x = x * 10 + c - '0'; c = getchar();}return x *= f;
}void build(int len) {size = (int)sqrt(len), num = len / size;if (len % size) num++;for (int i = 1; i <= len; i++) bel[i] = (i - 1) / size + 1;for (int i = 1; i <= num; i++) {blo[i].l = (i - 1) * size;blo[i].r = i * size;}blo[num].r = len;
}void update(int pos, int val) {blo[bel[pos]].r++;for (int i = bel[pos] + 1; i <= num; i++) {blo[i].l++;blo[i].r++;}a.insert(a.begin() + pos, val);
}int ask(int pos) {return a[pos];
}int main() {cin >> n;a.push_back(-1);for (int i = 1; i <= n; i++) a.push_back(read());build(n);for (int i = 1; i <= n; i++) {int op = read(), l = read(), r = read(), c = read();if(!op) update(l, r);else printf("%d\n", ask(r));}return 0;
}

转载于:https://www.cnblogs.com/BigYellowDog/p/11243433.html

LOJ 数列分块入门6相关推荐

  1. 【分块入门】LOJ 数列分块入门 1 - 9 (学习更新……)

    dl题解 _「分块」数列分块入门1 – 9 by hzwer LOJ #6277. 数列分块入门 1 题意:给出一个长为n的数列,以及n个操作,操作涉及区间加法,单点查值. 时间限制:100ms 分块 ...

  2. LOJ #6280. 数列分块入门 4-分块(区间加法、区间求和)

    #6280. 数列分块入门 4 内存限制:256 MiB时间限制:500 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: hzwer 提交提交记录统计测试数据讨论 题目描述 给出一个长为 ...

  3. LOJ #6279. 数列分块入门 3-分块(区间加法、查询区间内小于某个值x的前驱(比其小的最大元素))...

    #6279. 数列分块入门 3 内存限制:256 MiB时间限制:1500 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: hzwer 提交提交记录统计测试数据讨论 3 题目描述 给出一 ...

  4. LOJ——#6277. 数列分块入门 1

    ~~推荐播客~~ 「分块」数列分块入门1 – 9 by hzwer 浅谈基础根号算法--分块 博主蒟蒻,有缘人可直接观摩以上大佬的博客... #6277. 数列分块入门 1 题目大意: 给出一个长为 ...

  5. #6277. 数列分块入门 1

    题目链接:https://loj.ac/problem/6277 学习博客:http://hzwer.com/8053.html #6277. 数列分块入门 1 内存限制:256 MiB时间限制:10 ...

  6. #6279. 数列分块入门 3(区间修改,查询权值前驱)

    #6279. 数列分块入门 3 这是使用hzwer建议的set写的分块代码,set自动排序,支持二分查找,但是常数较大,比我下面写的用vector实现的分块慢了三倍,空间大了10倍. #include ...

  7. 数列分块入门(套题)(loj6277,loj6278,loj6279,loj6280,loj6281,loj6282,loj6283,loj6284,loj6285)

    前言 zjoi考差了,码一些分块题缓解一下心情 壹 数列分块入门 1[loj6277] 题目大意:区间加,单点查 直接分块,区间加时完全覆盖的块打tag,边界块暴力重构 块大小设为n\sqrt nn​ ...

  8. 数列分块入门 (1 ~ 7)

    分块 6277. 数列分块入门 1 分块思想 我们把每m个元素分成一块,所以我们总共的块数就是n/mn / mn/m块,一般情况下我们取m=nm = \sqrt{n}m=n​.对于区间加操作,我们可以 ...

  9. 「分块」数列分块入门1 – 9

    ACM模板 放暑假了,回归!!! 自己不会写暴力,而且好久没写代码了,于是学学分块的优雅暴力~ 「分块入门-LibreOJ」 「分块」数列分块入门1 – 9 by hzwer 数列简单分块问题实际上有 ...

最新文章

  1. NSLog不打印设置
  2. 5年博龄只有十几篇文章,惭愧呀
  3. stk 坐标系_STK中文用户手册.pdf
  4. 下列说法正确的是( )
  5. 可以让SQL针对某个错误信息号抓DUMP的命令组合
  6. codeforces C. Diverse Permutation(构造)
  7. 为什么dubbo的调用重试不建议设置成超过1
  8. Android 功耗(20)---Android后台调度与省电
  9. 使用Python和Numpy进行波士顿房价预测任务(二)【深度学习入门_学习笔记】
  10. 机器学习-线性回归scikit-learn
  11. 阶段3 3.SpringMVC·_04.SpringMVC返回值类型及响应数据类型_2 响应之返回值是String类型...
  12. new delete 之placement new 和placement delete
  13. OneNote for win10防止英文自动切换字体工具
  14. 常见概率抽样方法及其适用场景总结(简单随机抽样、分层抽样、整群抽样、系统抽样)
  15. Unity 3D 动画系统(Mecanim)|| Unity 3D 人形角色动画(Avatar)
  16. 杰理之电脑连接样机蓝牙,开启音量同步,电脑无法大范围调节音量【篇】
  17. drag与drop事件
  18. Tabby sftp 下载文件夹
  19. ListView缓存机制小结
  20. 【MySQL】数据库机房架构与跨城容灾详解(实战篇)(MySQL专栏启动)

热门文章

  1. k8s minikube管理镜像相关命令:minikube image list/pull/load
  2. vscode设置终端字体大小
  3. Scala键盘录入代码示例
  4. scala中object和class关键字的区别
  5. Java基础--通过反射获取成员方法并使用
  6. Coding: 2的N次方
  7. vue tag=“li“ 和event原有样式渲染不出来
  8. php7序列化,php 7.2中未序列化字符串时出现问题
  9. java引用其他类的数据头文件_Java 实现数据表与简单Java类映射转换
  10. java大数据开发是做什么的_Java转型大数据开发教材,技能储备都在这儿!