【bzoj2877】 Noi2012—魔幻棋盘】的更多相关文章

显然一个序列的gcd=gcd(其差分序列的gcd,序列中第一个数).于是一维情况直接线段树维护差分序列即可. 容易想到将该做法拓展到二维.于是考虑维护二维差分,查询时对差分矩阵求矩形的gcd,再对矩形的两个边界求一下原本的gcd即可. 但这样大概需要三个二维线段树,空间可能不太够.由于查询区域是由一个给定点拓展的,可以改为以该点为中心建差分矩阵,这样剩下部分是一个十字形,可以直接一维线段树维护,就只需要一个二维线段树了. 注意题面有锅,详见discuss,被坑了一年. #include<iost…
https://blog.sengxian.com/solutions/bzoj-2877 注意二维线段树的upd()也是一个O(log n)的函数(pushdown()应该也是但没写过). #include<cstdio> #include<algorithm> #define Ls (x<<1) #define Rs (Ls|1) #define Lson Ls,L,mid #define Rson Rs,mid+1,R #define lson ls[x],L,m…
本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/转载请注明出处,侵权必究,保留最终解释权! Description   Input 第一行为两个正整数N,M,表示棋盘的大小. 第二行为两个正整数X,Y,表示棋盘守护者的位置. 第三行仅有一个正整数T,表示棋盘守护者将进行次操作. 接下来N行,每行有M个正整数,用来描述初始时棋盘上每个位置的数. 接…
http://www.lydsy.com/JudgeOnline/problem.php?id=2877 (题目链接) 题意 一个${n*m}$的矩阵,维护两个操作:给任意子矩阵${+val}$:问某一包含点${(X,Y)}$的矩阵内元素的gcd. Solution 左转题解,参见PoPoQQQ,写的蛮详细的,像我这种没写过树套树的都会了→_→. 代码也是模着PoPoQQQ大爷的写的,边界真的好蛋疼. 对于不能用以任意一点为差分中心的原因,我有一点自己的看法.我们考虑之所以差分后的数组的gcd与…
浅谈树状数组与主席树:https://www.cnblogs.com/AKMer/p/9946944.html 题目传送门:https://lydsy.com/JudgeOnline/problem.php?id=2877 这就是个屎题. 而且至今我还不知道为什么洛谷和本地都可以过但是\(BZOJ\)会\(RE\) 利用更相减损数以棋盘守护者为中心进行二维差分,那么每次修改就变成若干个点的值的修改了. 然后二维线段树维护差分值. 详细一点你们可以看这个博客(我是懒得搞了):http://www.…
DescriptionInput 第一行为两个正整数N,M,表示棋盘的大小. 第二行为两个正整数X,Y,表示棋盘守护者的位置. 第三行仅有一个正整数T,表示棋盘守护者将进行次操作. 接下来N行,每行有M个正整数,用来描述初始时棋盘上每个位置的数. 接下来T行,按操作的时间顺序给出T次操作.每行描述一次操作,以一个数字0或1开头: 若以数字0开头,表示此操作为询问,随后会有四个非负整数x1,y1,x2,y2,表示询问的区域是以棋盘守护者的位置为基础向上扩展x1行,向下扩展y1行,向左扩展x2列,向…
http://www.lydsy.com/JudgeOnline/problem.php?id=2877 二维线段树. 好恶...... B类数据: 棋盘是一维的. 我们有一个结论: $gcd(a_{1},a_{2},...,a_{n-1},a_{n})=gcd(a_{2}-a_{1},a_{3}-a_{2},...,a_{n}-a_{n-1},a_{1})$ 证明: 假设集合A是a1,a2,...,an-1,an的所有公约数的集合,集合B是a2-a1,a3-a2,...,an-an-1,a1的…
先考虑只有一维的情况,要求支持区间加和求区间 \(\gcd\),根据 \(\gcd\) 的性质,发现: \[ \gcd(a_1,a_2,a_3,\ldots a_n)=\gcd(a_i,a_2-a_1,a_3-a_2,\ldots a_n-a_{n-1}) \] 其中 \(a_i\) 为原序列 \(a\) 中的任意一个元素,其与序列 \(a\) 的差分序列的 \(\gcd\) 即为原序列的 \(\gcd\).根据该性质,对于一维的情况,就可以通过线段树单点修改维护差分序列,区间查询 \(\gcd…
貌似想复杂了…… #include <iostream> #include <cstring> #include <cstdio> #define mid ((l+r)>>1) using namespace std; ; ; int N,M,Q; struct Array{ long long num[maxm]; long long *operator [](int x){ )*M]; } }a,b; ?x:-x;} long long GCD(long…
Description 将要读二年级的小 Q 买了一款新型益智玩具——魔幻棋盘,它是一个N行M列的网格棋盘,每个格子中均有一个正整数.棋盘守护者在棋盘的第X行Y列(行与列均从1开始编号) 并且始终不会移动.棋盘守护者会进行两种操作: (a)询问:他会以自己所在位置为基础,向四周随机扩展出一块大小不定的矩形区域,向你询问这一区域内所有数的最大公约数是多少. (b)修改:他会随意挑选棋盘上的一块矩形区域,将这一区域内的所有数同时加上一个给定的整数. 游戏说明书上附有这样一句话“聪明的小朋友,当你连续…