loj6277】的更多相关文章

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 分块,一个神奇的暴力算法.可以把很多\(O(n^2)\)的数据结构题的暴力优化到常数极小的\(O(n\sqrt n)\).当一些毒瘤题无法用线段树,主席树,平衡树,树状数组......等\(O(n\ logn)\)方法写出时当然在你不会写这些算法的时候用大力分块骗分是再好不过的方法了! 当然分块的大致思想比较简单,我们看一下: /Here is Pic 1 但是由于分块在实际应用中有不同的方法,所以让我们来找各种各样的板子题来练练手吧. 数列分块入门 1--区间加法,单点查值 这…
分块裸题 然后就是记得左右边界处理和分块的初始化 忘了初始化会被卡成暴力 #include <cstdio> #include <algorithm> #include <cstring> #include <cmath> using namespace std; ],belong[],lm[],rm[],num,sz,tag[],n; inline int qread(void){ ; ; char s; s=getchar(); ')&&…
题解: 树状数组模板提 代码: #include<bits/stdc++.h> using namespace std; ; int num[N],n,a[N],l,r,c,opt; void insert(int x,int y) { for (;x<=n;x+=x&-x)num[x]+=y; } int find(int x) { ; for (;x;x-=x&-x)ans+=num[x]; return ans; } int main() { scanf("…
题目描述 给出一个长为 n 的数列,以及 n 个操作,操作涉及区间加法,单点查值. 输入格式 第一行输入一个数字 n. 第二行输入 n 个数字,第 iii 个数字为 a​i​​,以空格隔开. 接下来输入 n 行询问,每行输入四个数字 opt.l.r.c,以空格隔开. 若 opt=0,表示将位于 [l,r] 的之间的数字都加 c. 若 opt=1,表示询问 a​r​​ 的值(ll和 c忽略). 输出格式 对于每次询问,输出一行一个数字表示答案. 样例 样例输入 4 1 2 2 3 0 1 3 1…
题目大意: 给你一个长度为$n(n\leq 50000)$的序列$A$,支持进行以下两种操作: 1.将区间$[l,r]$中所有数加上$c$: 2.询问$A_r$的值.思路: 分块. 对于整块的数据打标记,零散的数据直接修改. #include<cmath> #include<cstdio> #include<cctype> inline int getint() { register char ch; register bool neg=false; while(!is…
hzwer的讲解 一 给出一个长为 \(n\) 的数列,以及 \(n\) 个操作,操作涉及区间加法,单点查值. #include <iostream> #include <cstdio> #include <cmath> using namespace std; int n, a[50005], opt, uu, vv, ww, tag[305], blc, bel[50005]; void add(int uu, int vv, int ww){ int p=bel[…
裸题分块. #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…
题目描述 给出一个长为\(n\)的数列,以及\(n\)个操作,操作涉及区间加法,单点查值. 输入格式 第一行输入一个数字\(n\). 第二行输入\(n\)个数字,第\(i\)个数字为\(a_{i}\),以空格隔开. 接下来输入\(n\)行询问,每行输入四个数字\(opt\).\(l\).\(r\).\(c\),以空格隔开. 若\(opt = 0\),表示将位于\([l, r]\)的之间的数字都加\(c\). 若\(opt = 1\),表示询问\(a_{r}\)的值(\(l\)和\(c\)忽略).…
数列分块是莫队分块的前置技能,练习一下 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&…