loj 6278 6279 数列分块入门 2 3】的更多相关文章

参考:「分块」数列分块入门1 – 9 by hzwer 2 Description 给出一个长为\(n\)的数列,以及\(n\)个操作,操作涉及区间加法,询问区间内小于某个值\(x\)的元素个数. 思路 每个块内保持升序排列. 则块外暴力统计,块内二分查找分界点. 一些注意点,如: 要记录下标: 块外暴力修改完之后需要再排序: 在块内二分查找的值是\(c-tag[i]\)而非\(c\). Code #include <bits/stdc++.h> #define maxn 50010 #def…
#6279. 数列分块入门 3 内存限制:256 MiB时间限制:1500 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: hzwer 提交提交记录统计测试数据讨论 3   题目描述 给出一个长为 nn 的数列,以及 nn 个操作,操作涉及区间加法,询问区间内小于某个值 xx 的前驱(比其小的最大元素). 输入格式 第一行输入一个数字 nn. 第二行输入 nn 个数字,第 ii 个数字为 a_iai​,以空格隔开. 接下来输入 nn 行询问,每行输入四个数字 \mathrm{opt…
#6277. 数列分块入门 1 内存限制:256 MiB时间限制:100 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: hzwer 提交提交记录统计讨论 3 测试数据 题目描述 给出一个长为 n 的数列,以及 n 个操作,操作涉及区间加法,单点查值. 输入格式 第一行输入一个数字 n. 第二行输入 n 个数字,第 i 个数字为 ai,以空格隔开. 接下来输入 n 行询问,每行输入四个数字 opt.l.r.c,以空格隔开. 若 opt=0,表示将位于 [l,r]的之间的数字都加 c…
嗯... 题目链接:https://loj.ac/problem/6279 这道题在分块的基础上用vc数组记录,然后最后分三块,两边暴力枚举找前驱,中间lower_bound找前驱. AC代码: #include<cstdio> #include<iostream> #include<cmath> #include<algorithm> #include<vector> using namespace std; ; ; const int INF…
区间加值还是正常的操作,查找前驱的时候用lower_bound查找,然后范围所在位置的值 #include<map> #include<set> #include<ctime> #include<cmath> #include<stack> #include<queue> #include<string> #include<vector> #include<cstdio> #include<c…
题目链接:https://loj.ac/problem/6279 题目大意:中文题目 具体思路:按照上一个题的模板改就行了,但是注意在整块查找的时候的下标问题. AC代码: #include<bits/stdc++.h> using namespace std; # define ll long long ; ; const int inf = 0x3f3f3f3f; ll l[maxn],r[maxn],belong[maxn]; ll add[maxn],a[maxn],b[maxn];…
题目链接:https://loj.ac/problem/6279 推荐博客:https://blog.csdn.net/qq_36038511/article/details/79725027 这题区间查询某个数字x的前驱(区间里比x小的最大的数),我用的是二分,自己手写二分的时候一直用的是没有排序的数组,好无语,后面又用set做了一遍,熟系一下set. #include<iostream> #include<cstring> #include<algorithm> #…
题目大意:分块维护一个有 n 个数字的序列,有两种操作:区间加,区间查询小于某个数的元素个数.n <= 50000 预处理阶段:处理出块内元素的相对大小顺序(排序),时间复杂度为 \(O(nlogn)\) 查询阶段:区间加过程中每次重构的时间复杂度为 \(O(\sqrt n*log\sqrt n)\),查询过程中每次时间复杂度为 \(O(\sqrt n)\),一共 n 次操作. 因此,总时间复杂度为 \(O(n*logn+n*\sqrt n*log\sqrt n)\) 注:该题无法用树套树进行维…
题目原址 给出一个长为n的数列,以及n个操作,操作涉及区间加法,询问区间内小于某个值x的元素个数. code: #include<cstdio> #include<iostream> #include<cstring> #include<cmath> #include<vector> #include<algorithm> #define ll long long using namespace std; int rd() { int…
题解:自然是先分一波块,把同一个块中的所有数字压到一个vector中,将每一个vector进行排序.然后对于每一次区间加,不完整的块加好后暴力重构,完整的块直接修改标记.查询时不完整的块暴力找最接近x的解,完整的块用二分查找,其实还可以用set维护,出于对最暴力AC的尊敬,我并没有这么写.照样过了. 代码如下: #include<cmath> #include<cstdio> #include<vector> #include<cstring> #inclu…
~~推荐播客~~ 「分块」数列分块入门1 – 9 by hzwer 浅谈基础根号算法——分块 博主蒟蒻,有缘人可直接观摩以上大佬的博客... #6277. 数列分块入门 1 题目大意: 给出一个长为 $n$ 的数列,以及 $n$ 个操作,操作涉及区间加法,单点查值. 分块入门,区间修改+单点查询 所谓分块,实际上是一种优美的暴力,算是一种数据结构吧...将区间分成许多大小相同的块,对于多出来的部分暴力去做,一般块的大小为$√n$ 看了大佬们的代码,有点儿懵逼=_=来模拟一下流程吧,可能会清晰一点…
声明 持续更新,因为博主也是正在学习分块的知识,我很菜的,菜的抠$jio$ 写在前面 分块是个很暴力的算法,但却比暴力优秀的多,分块算法的时间复杂度一般是根号的,他的主要思想是将一个长度是$n$的数列分为$m$个块,在每个块上维护一些东西,询问的时候才会用到这些维护的东西,就像线段树中的懒标记一样. Loj #6297.  数列分块入门1 这道题目是分块最基础的题目,仅需要支持区间加法和单点查询两个操作. 将这个数列分为$\sqrt{n}$块.同时可以确定每个块的左右端点.然后在于处理一个数组$…
#6278. 数列分块入门 2 内存限制:256 MiB时间限制:500 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: hzwer 提交提交记录统计测试数据讨论 6   题目描述 给出一个长为 nn 的数列,以及 nn 个操作,操作涉及区间加法,询问区间内小于某个值 xx 的元素个数. 输入格式 第一行输入一个数字 nn. 第二行输入 nn 个数字,第 ii 个数字为 a_iai​,以空格隔开. 接下来输入 nn 行询问,每行输入四个数字 \mathrm{opt}opt.ll.r…
数列分块入门 1 https://loj.ac/problem/6277 区间加 + 单点查询 #include <iostream> #include <cstdio> #include <cmath> using namespace std; ; #define gc getchar() inline int read() { ; char c = gc; ') c = gc; + c - ', c = gc; return x; } int A[N], Add[N…
Preface 分块,一个神奇的暴力算法.可以把很多\(O(n^2)\)的数据结构题的暴力优化到常数极小的\(O(n\sqrt n)\).当一些毒瘤题无法用线段树,主席树,平衡树,树状数组......等\(O(n\ logn)\)方法写出时当然在你不会写这些算法的时候用大力分块骗分是再好不过的方法了! 当然分块的大致思想比较简单,我们看一下: /Here is Pic 1 但是由于分块在实际应用中有不同的方法,所以让我们来找各种各样的板子题来练练手吧. 数列分块入门 1--区间加法,单点查值 这…
#6285. 数列分块入门 9 内存限制:256 MiB时间限制:1500 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: hzwer 提交提交记录统计测试数据讨论 2   题目描述 给出一个长为 nn 的数列,以及 nn 个操作,操作涉及询问区间的最小众数. 输入格式 第一行输入一个数字 nn. 第二行输入 nn 个数字,第 ii 个数字为 a_iai​,以空格隔开. 接下来输入 nn 行询问,每行输入两个数字 ll.rr,以空格隔开. 表示查询位于 [l,r][l,r] 的数字…
#6284. 数列分块入门 8 内存限制:256 MiB时间限制:500 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: hzwer 提交提交记录统计测试数据讨论 2   题目描述 给出一个长为 nn 的数列,以及 nn 个操作,操作涉及区间询问等于一个数 cc 的元素,并将这个区间的所有元素改为 cc. 输入格式 第一行输入一个数字 nn. 第二行输入 nn 个数字,第 i 个数字为 a_iai​,以空格隔开. 接下来输入 nn 行询问,每行输入三个数字 ll.rr.cc,以空格…
#6283. 数列分块入门 7 内存限制:256 MiB时间限制:500 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: hzwer 提交提交记录统计测试数据讨论 2   题目描述 给出一个长为 nn 的数列,以及 nn 个操作,操作涉及区间乘法,区间加法,单点询问. 输入格式 第一行输入一个数字 nn. 第二行输入 nn 个数字,第 ii 个数字为 a_iai​,以空格隔开. 接下来输入 nn 行询问,每行输入四个数字 \mathrm{opt}opt.ll.rr.cc,以空格隔开…
#6282. 数列分块入门 6 内存限制:256 MiB时间限制:500 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: hzwer 提交提交记录统计测试数据讨论 1   题目描述 给出一个长为 nn 的数列,以及 nn 个操作,操作涉及单点插入,单点询问,数据随机生成. 输入格式 第一行输入一个数字 nn. 第二行输入 nn 个数字,第 ii 个数字为 a_iai​,以空格隔开. 接下来输入 nn 行询问,每行输入四个数字 \mathrm{opt}opt.ll.rr.cc,以空格…
#6281. 数列分块入门 5 内存限制:256 MiB时间限制:500 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: hzwer 提交提交记录统计测试数据讨论 5   题目描述 给出一个长为 nn 的数列 a_1\ldots a_na1​…an​,以及 nn 个操作,操作涉及区间开方,区间求和. 输入格式 第一行输入一个数字 nn. 第二行输入 nn 个数字,第 ii 个数字为 a_iai​,以空格隔开. 接下来输入 nn 行询问,每行输入四个数字 \mathrm{opt},…
#6280. 数列分块入门 4 内存限制:256 MiB时间限制:500 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: hzwer 提交提交记录统计测试数据讨论   题目描述 给出一个长为 nn 的数列,以及 nn 个操作,操作涉及区间加法,区间求和. 输入格式 第一行输入一个数字 nn. 第二行输入 nn 个数字,第 ii 个数字为 a_iai​,以空格隔开. 接下来输入 nn 行询问,每行输入四个数字 \mathrm{opt}opt.ll.rr.cc,以空格隔开. 若 \ma…
#6277. 数列分块入门 1 内存限制:256 MiB时间限制:100 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: hzwer 提交提交记录统计测试数据讨论 2   题目描述 给出一个长为 nn 的数列,以及 nn 个操作,操作涉及区间加法,单点查值. 输入格式 第一行输入一个数字 nn. 第二行输入 nn 个数字,第 ii 个数字为 a_iai​,以空格隔开. 接下来输入 nn 行询问,每行输入四个数字 \mathrm{opt}opt.ll.rr.cc,以空格隔开. 若 \…
题目链接:https://loj.ac/problem/6279 题目描述 给出一个长为 \(n\) 的数列,以及 \(n\) 个操作,操作涉及区间加法,询问区间内小于某个值 \(x\) 的前驱(比其小的最大元素). 输入格式 第一行输入一个数字 \(n\). 第二行输入 \(n\) 个数字,第 \(i\) 个数字为 \(a_i\),以空格隔开. 接下来输入 \(n\) 行询问,每行输入四个数字 \(opt\).\(l\).\(r\).\(c\),以空格隔开. 若 \(opt=0\),表示将位于…
昨天对着代码看了一晚上 然后今天终于在loj上过了 数列分块入门9题撒花★,°:.☆( ̄▽ ̄)/$:.°★ . 然后相当玄学 块的大小调成\(\sqrt{n}\)会TLE,改成150就过了 啧 然后就是用map离散化之后的值不能直接比较大小 锅锅锅 #include <cstdio> #include <algorithm> #include <cstring> #include <vector> #include <map> #include…
Portals 分块需注意的问题 数组大小应为,因为最后一个块可能会超出的范围. 当操作的区间在一个块内时,要特判成暴力修改. 要清楚什么时候应该+tag[t] 数列分块入门 1 给出一个长为的数列,以及个操作,操作涉及区间加法,单点查值. //数列分块入门 1 #include <cstdio> #include <cmath> inline char gc() { static char now[1<<16],*S,*T; if(S==T) {T=(S=now)+f…
Preface 最后一题我一直觉得用莫队是最好的. 数列分块入门 7--区间乘法,区间加法,单点询问 还是很简单的吧,比起数列分块入门 7就多了个区间乘. 类似于线段树,由于乘法的优先级高于加法,因此我们先乘后加. 具体的,我们对于每一个块再额外维护一个乘法标记,每次乘法时同时更新乘法/加法标记. CODE #include<cstdio> #include<cctype> #include<cmath> #include<algorithm> using…
Preface 个人感觉这中间的三题是最水的没有之一 数列分块入门 4--区间加法,区间求和 这个也是很多数据结构完爆的题目线段树入门题,但是练分块我们就要写吗 修改还是与之前类似,只不过我们要维护每一块内元素的和,注意这个要实时更新 这样就可以轻松水过了. CODE #include<cstdio> #include<cctype> #include<cmath> using namespace std; const int N=50005,BLO=250; int…
题目链接:https://loj.ac/problem/6278 题目大意:中文题目 具体思路:数列分块模板题,对于更新的时候,我们通过一个辅助数组来进行,对于原始的数组,我们只是用来加减,然后这个辅助数组的作用就是对每一块进行排序,当查询的时候,如果不是整块的,我们直接通过a数组来记录,对于整块的,我们直接通过排序的辅助数组进行二分查找就可以了. 注意每一次更新,除了整块的,我们都需要进行对b数组这一整块的重新赋值,因为只是部分赋值的话,b数组已经排序了,这样的话数组的下标对应的数就已经改变了…
数列分块是莫队分块的前置技能,练习一下 1.loj6277 给出一个长为n的数列,以及n个操作,操作涉及区间加法,单点查值. 直接分块+tag即可 #include <bits/stdc++.h> #define ll long long #define IO ios::sync_with_stdio(false);cin.tie(0);cout.tie(0) #define pp pair<int,int> #define rep(ii,a,b) for(int ii=a;ii&…
题目链接:https://loj.ac/problem/6277 题目描述 给出一个长为 \(n\) 的数列,以及 \(n\) 个操作,操作涉及区间加法,单点查值. 输入格式 第一行输入一个数字 \(n\). 第二行输入 \(n\) 个数字,第 \(i\) 个数字为 \(a_i\),以空格隔开. 接下来输入 \(n\) 行询问,每行输入四个数字 \(opt\).\(l\).\(r\).\(c\),以空格隔开. 若 \(opt=0\),表示将位于 \([l,r]\) 之间的数字都加 \(c\).…