[LOJ] 分块九题 2】的更多相关文章

单点插入,单点查询. 优化了的链表. 链表老写错,干脆用vector,也不算慢. 注意链表退化的问题,及时(比如操作根号n次)就重新建块,实测速度可以提高一倍,这还是数据随机的情况,若涉及大量同一位置插入,会让分块大大退化. build没必要写两个. //Stay foolish,stay hungry,stay young,stay simple #include<iostream> #include<cmath> #include<cstring> #include…
https://loj.ac/problem/6280 区间修改,区间求和. 本来线段树的活. //Stay foolish,stay hungry,stay young,stay simple #include<iostream> #include<cstdio> #include<cctype> #include<cmath> using namespace std; typedef long long ll; const int MAXN=500005…
https://loj.ac/problem/6279 区间修改,区间查询前驱. TLE无数,我觉得这代码最精髓的就是block=1000. 谜一样的1000. 两个启示: 块内可以维护数据结构,比如set 可以换换块大小,自造数据测试时间 //Stay foolish,stay hungry,stay young,stay simple #include<iostream> #include<algorithm> #include<cstring> #include&…
https://loj.ac/problem/6278 区间修改,查询区间第k大. 块内有序(另存),块内二分. 还是用vector吧,数组拷贝排序,下标搞不来.. //Stay foolish,stay hungry,stay young,stay simple #include<iostream> #include<algorithm> #include<cstring> #include<cmath> #include<cstdio> #i…
https://loj.ac/problem/6277 区间修改,单点查询. //Stay foolish,stay hungry,stay young,stay simple #include<iostream> #include<cstdio> #include<cctype> #include<cmath> using namespace std; const int MAXN=500005; inline int read_d(){ int ret=…
区间查询数值+整体赋值 维护tag代表整个区间被赋成了tag[i] 用pushdown操作,而不是修改了再check. 不压缩代码了,调起来心累,长点有啥不好. //Stay foolish,stay hungry,stay young,stay simple #include<iostream> #include<cmath> #include<cctype> #include<cstdio> using namespace std; inline int…
区间加法,区间乘法,单点查询. 洛谷线段树2 屡清加法乘法的关系,定义答案为 a*mut+add 对于整块: 新的乘w,mut和add都要乘w 新的加w,add加w //Stay foolish,stay hungry,stay young,stay simple #include<iostream> #include<cmath> #include<cstdio> #include<cctype> using namespace std; inline i…
区间开平方,区间查询. lazy标记改为区间是否全是1或者0,这样的区间是没有更新价值的. //Stay foolish,stay hungry,stay young,stay simple #include<iostream> #include<cmath> #include<cstdio> #include<cctype> #define sq(x) (floor(sqrt(x))) using namespace std; const int MAXN…
闲话 莫队算法似乎还是需要一点分块思想的......于是我就先来搞分块啦! 膜拜hzwer学长神犇%%%Orz 这九道题,每一道都堪称经典,强力打Call!点这里进入 算法简述 每一次考试被炸得体无完肤之后,又听到讲题目的Dalao们爆出一句 数据不大,用分块暴力搞一下就AC了 的时候,我就会五体投地,不得翻身...... 分块?暴力?真的有如此玄学? 直到现在我还是觉得它很笨拙,但要熟练运用(尤其是打大暴力部分分的时候),绝非易事. 没错,分块是优化的暴力,更轻松地资瓷在线,是一种算法思想,主…
hzwer分块9题 分块1:区间加法,单点查询 Code #include<bits/stdc++.h> #define in(i) (i=read()) using namespace std; const int N=5e5+10,inf=2e9; int read() { int ans=0,f=1; char i=getchar(); while(i<'0' || i>'9') {if(i=='-') f=-1; i=getchar();} while(i>='0'…
从零开始的分块学习系列(感谢hzwer) 题目顺序是我建议的做题顺序 先说一句:分块的核心思想(其实本身分块就可以说是一种思想)是:均摊(或者说平衡/权衡?)复杂度,同时这种思想本身不只局限于序列分块(前一篇解题里有提到) 序列分块之① 区间加法+单点查询 分块入门题 知道分块的思想之后应该都会做,对整块打标记,对不超过块大小的零散区间暴力修改:查询的时候就是原数+所在块的标记 #include<cmath> #include<cstdio> #include<cstring…
[BZOJ 5252][LOJ 2478][九省联考2018] 林克卡特树 题意 给定一个 \(n\) 个点边带权的无根树, 要求切断其中恰好 \(k\) 条边再连 \(k\) 条边权为 \(0\) 的边重新连成一棵树, 最大化新树上某条路径的权值和. \(0\le k<n\le 3\times 10^5\). 边权的绝对值不超过 \(1\times 10^6\). 提示: 题目并不难 题解 当时场上做这题的时候根本不知道有wqs二分这种高端套路...看到提示之后果断跑路了qaq... 首先切断…
目录 分块9题 出题人hzw的解析 数列分块入门 1 修改:区间加 查询:单点值查询 代码 数列分块入门 2 修改:区间加 查询:区间排名 代码 数列分块入门 6 修改:单点插入 查询:单点值 代码 数列分块入门 7 修改:区间加,区间乘 查询:单点查询 代码 数列分块入门 8 修改:区间赋值 查询:区间计数 代码 [总集] LOJ「分块」数列分块入门1 – 9 分块9题 出题人hzw的解析 (tips.以下代码中IO优化都已省去,想看可以点传送门) 数列分块入门 1 修改:区间加 查询:单点值…
题意 给出一个序列,在线询问区间众数.如果众数有多个,输出最小的那个. 题解 这是一道分块模板题. 一个询问的区间的众数,可能是中间"整块"区间的众数,也可能是左右两侧零散的数中的任意一个.为了\(O(\sqrt n)\)求出究竟是哪一个,我们需要在一次对两侧零散点的扫描之后\(O(1)\)求出被扫数在区间内的的出现次数. 所以需要预处理的有: cnt[i][j]: i在前j块中出现的次数 mode[i][j]: 第i块到第j块组成的大区间的众数 #include <cstdio…
Luogu 2801 教主的魔法 | 分块模板题 我犯的错误: 有一处l打成了1,还看不出来-- 缩小块大小De完bug后忘了把块大小改回去就提交--还以为自己一定能A了-- #include <cstdio> #include <cstring> #include <algorithm> #include <set> using namespace std; typedef long long ll; #define space putchar(' ')…
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…
Preface 分块,一个神奇的暴力算法.可以把很多\(O(n^2)\)的数据结构题的暴力优化到常数极小的\(O(n\sqrt n)\).当一些毒瘤题无法用线段树,主席树,平衡树,树状数组......等\(O(n\ logn)\)方法写出时当然在你不会写这些算法的时候用大力分块骗分是再好不过的方法了! 当然分块的大致思想比较简单,我们看一下: /Here is Pic 1 但是由于分块在实际应用中有不同的方法,所以让我们来找各种各样的板子题来练练手吧. 数列分块入门 1--区间加法,单点查值 这…
题意:http://acm.uestc.edu.cn/#/problem/show/1324 中文题,自己看喽. 题解:分块模板,update时顺便更新块属性.ask时先判掉belong[l]==belong[r].build函数时直接用模板喽. 坑:打错了个字母,改了一下还改错了.还写错个括号. ac代码: #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<queue> #include<string.h&…
E. Army Creation time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output As you might remember from our previous rounds, Vova really likes computer games. Now he is playing a strategy game known a…
<题目链接> 注意:这可能也是一道模板题. 注意2:$p=998224352$ 注意3:对于$100\%$的数据,$n\leq 5 \times 10^6$ 这个题很启发思路,如果直接快速幂应该会T飞(不过还是看到卡常大师$997ms$过……). 所以 法一:直接快速幂 复杂度:$\Theta(N \log p)$ 不多说直接快速幂即可. 法二:神奇分块思路 由于询问比较多,我们考虑预处理. 假设我们处理到$k$. 我们在指数上化柿子. 有: $$\large x^y=x^{y\, \mod\…
裸题分块. #include <bits/stdc++.h> using namespace std; ],b[],n,m,t1,t2,t3,t4,sq; int main(){ ios::sync_with_stdio(false); cin>>n; sq=(int)sqrt(n); ;i<=n;i++) cin>>a[i]; ;i<=n;i++) { cin>>t1>>t2>>t3>>t4; ){ )/sq…
Remove Nth Node From End of List 问题简介;给定链表,从链表末尾删除第n个节点并返回其头部 例: 给定链表:1-> 2-> 3-> 4-> 5,n = 2 从末尾删除第二个节点后,链表变为1-> 2-> 3-> 5 解法一: 先遍历一遍链表,得到链表的长度,再将长度减去给定的n得到正序的索引,再遍历一遍链表,在正序的索引处连接下下结点 复杂度分析: 时间复杂度:o(n)取决于链表的长度 空间复杂度:o(1)占有的是固定的内存 解法二…
#6303. 水题 内存限制 10 MiB 时间限制:1000 ms 标准输入输出 题目描述 给定正整数 n,kn, kn,k,已知非负整数 xxx 满足 n!modkx=0,求 xmaxx_{max}x​max​​ . 输入格式 本题包含多组数据,请处理至文件末尾. 对于每组数据,共有一行,两个整数,表示 n,kn, kn,k. 输出格式 对于每组数据,输出一行,一个整数,表示 xmaxx_{max}x​max​​. 样例 输入样例 10 2 5000000000000000000 2 500…
class Solution { public: void quick_sort(vector<int>& nums,int res,int res_end) { )//错过,不能小于2 return; int begin=res; int end=res_end; bool flag=true; while(res!=res_end) { if(flag) { if(nums[res]>nums[res_end]) { int temp=nums[res]; nums[res]…
class Solution { public: vector<int> grayCode(int n) { vector<int> res; res.push_back();//毕竟0开头 ) return res; vector<bool> index;//建立一个长为2^n的符号数组,目的是为了在检测过程中,判断某个数值是否已经被用过了 index.push_back(true); ;i<pow(,n);i++) index.push_back(false)…
class Solution { public: vector<vector<int>> generateMatrix(int n) { )//特殊情况 { vector<vector<int>> empty; return empty; } vector<vector<int>> res; ;i<n;i++)//要先初始化 { vector<int> zeros; ;j<n;j++) zeros.push_b…
// 面试题59(二):队列的最大值 // 题目:给定一个数组和滑动窗口的大小,请找出所有滑动窗口里的最大值.例如, // 如果输入数组{2, 3, 4, 2, 6, 2, 5, 1}及滑动窗口的大小3,那么一共存在6个 // 滑动窗口,它们的最大值分别为{4, 4, 6, 6, 6, 5}, #include <iostream> #include <deque> #include <exception> using namespace std; template&l…
题目链接 洛谷. LOJ,LOJ机子是真的快 Solution 我直接上暴力了...\(O(n^2k)\)洛谷要\(O2\)才能过...loj平均单点一秒... 直接枚举每个点为第\(k\)大的点,然后\(dp\)出方案数统计答案就好了. \(f[i][j]\)\(dfs\)下去的时候表示考虑到\(i\),有\(j\)个大于\(i\)的点的方案数,此时没有考虑儿子. 然后回溯的时候从叶子节点把儿子的影响加回来就好了. #include<bits/stdc++.h> using namespac…
[BZOJ3834][Poi2014]Solar Panels Description Having decided to invest in renewable energy, Byteasar started a solar panels factory. It appears that he has hit the gold as within a few days  clients walked through his door. Each client has ordered a si…