CDQ求子矩阵的和】的更多相关文章

Description维护一个W*W的矩阵,初始值均为S.每次操作可以增加某格子的权值,或询问某子矩阵的总权值.修改操作数M<=160000,询问数Q<=10000,W<=2000000. Input第一行两个整数,S,W;其中S为矩阵初始值;W为矩阵大小 接下来每行为一下三种输入之一(不包含引号): "1 x y a" "2 x1 y1 x2 y2" "3" 输入1:你需要把(x,y)(第x行第y列)的格子权值增加a 输入2:…
        我们考虑一个$N\times M$的矩阵数据,若要对矩阵中的部分数据进行读取,比如求某个$a\times b$的子矩阵的元素和,通常我们可以想到$O(ab)$的遍历那个子矩阵,对它的各个元素进行求和.然而当$a$或$b$很大的时候,这样的计算显得太慢,如果要求子矩阵的最大元素和(如Ural 1146),更是简直慢到不能忍.         于是就想,能不能在读入数据的同时,我就先进行一些预处理,使得到后面进行计算的时候,可以简化一些步骤呢?答案是可以的.        我们开一个…
#include<bits/stdc++.h> #define LL long long #define fi first #define se second #define mk make_pair #define PII pair<int, int> #define PLI pair<LL, int> #define PLL pair<LL, LL> #define y1 skldjfskldjg #define y2 skldfjsklejg usin…
https://www.luogu.org/problemnew/show/P1169 第一次听说到这种dp的名称叫做悬线法,听起来好厉害 题意是求一个矩阵内的最大01交错子矩阵,开始想的是dp[2000][2000][2]维护这个位置向上向左扩充的矩阵最大长度之后n²扫一遍,但是写起来发现并不能有效的扩充,也就是状态转移方程很难写出来. 后来发现有一种奥妙重重的方法叫做悬线法,把我原本向左向上扩充的过程改为记录每一个点向左向右向上的最大长度,这些状态很显然可以通过扫一遍的方法求出来,然后对于每…
传送 一道看起来就很暴力的题. 这道题不仅暴力,还要用正确的姿势打开暴力. 因为子矩阵的参数有两个,一个行一个列(废话) 我们一次枚举两个参数很容易乱对不对?所以我们先枚举行,再枚举列 枚举完行,列,就计算一次当前子矩阵的分数,与ans取min. 代码: 但是复杂度会高到爆炸.来我们深吸一口O2. // luogu-judger-enable-o2 #include<bits/stdc++.h> using namespace std; ][],n,m,r,c,ans=,ch[],cl[];…
题目Description: 给出一个矩阵, 求子矩阵(可以是其本身)数之和的最大值 Input: 第一行 为行数n和列数m       (n≤500, m≤500) 接下来为一个n行m列的矩阵 (每个值ai,−1000 ≤ ai ≤ 1000) Output: 子矩阵(可以是其本身)数之和的最大值 Sample Input: 4  4 0 -2 -7  0 9  2 -6  2 -4 1 -4  1 -1 8  0  -2 Sample Output: 15 解题思路: 解法1:单纯用二维前缀…
我的第一道cdq分治题清明做了一下cdq分治的几道题,感觉这个东西实在是太厉害了离线大法好!关于几个经典的非数据结构做法具体可以看xhr神犇2013年的论文应用cdq分治的前提条件是不强制在线,修改操作互不影响.什么是互相影响,比如在第i个数后面插入一个数,这就明显是会影响到后面的操作在这个前提条件下,我们可以按照操作序列的时间线(先后)划分成两个规模缩小一半的子问题显然后面的修改对前面无影响,而后半部分的修改对后半部分的询问.前半部分对前半部分的询问是子问题,可以递归解决所以下面我们只要解决前…
Check Corners Time Limit: 2000/10000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 2513    Accepted Submission(s): 904 Problem Description Paul draw a big m*n matrix A last month, whose entries Ai,j are all intege…
1.基于分代的垃圾收集算法 设计思路:把对象按照寿命长短来分组,分为年轻代和年老代,新创建的对象被分在年轻代,如果对象经过几次回收后仍然存活,那么再把这个对象划分到年老代.年老代的收集频率不像年轻代那么频繁,这样就减少了每次垃圾回收时所要扫描的对象的数量,从而提高了垃圾回收效率. 把堆划分为若干个子堆,每个堆对应一个年龄代: JVM将整个堆划分为Young区.Old区和Perm区,存放不同年龄的对象,这个三个区存放的对象有如下区别: Young区:又分为Eden区和两个Survivor区,其中所…
题意 给出一个数字组成的立方体 在其中选取一个体 使这个体中的数字之和最小 不可以不选 fzu的题目分类动态规划里面不是按难度排得 是按照题号..记得以前做题碰到过算 矩阵里面求子矩阵的最大和的 不会 然后这次看着这个三维的..内心是崩溃的 幸好看了一眼范围 亮点是1<=n<=20 那直接处理一下暴力就可以了... 我们可以用一个dp[i][k][j]来记录 从1.1.1到i.k.j 之间的体的和 然后我们可以进行枚举每个体 处理的时间复杂度可以忽略 实际枚举的复杂度是n^6 但是做题的时候没…
题目链接 题意:给一个m*n的矩阵, 其中一些格子是空地(F), 其他是障碍(R).找一个全部由F 组成的面积最大的子矩阵, 输出其面积乘以3的结果. 思路:如果用枚举的方法,时间复杂度是O(m^2 n^2); 因为不但要枚举每一个点,而且矩阵的大小不知道,所以还要枚举长和宽. 可以通过枚举每一个点,求该点所能构成的最大矩形的边界. 分别用le[], rig[] 和 up[] 表示左边界,右边界和 上边界. #include <iostream> #include <cstring>…
虽然都是算法基础,不过做了之后还是感觉有长进的,前期基础不打好后面学得很艰难的,现在才慢慢明白这个道理. 闲话少说,上VOJ上的专题训练吧:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=40741#overview 1. A UVA 10602 Editor Nottoobad 好像是俄罗斯NOI的题目,题意是给定n个字符串,然后重新安排字符串的顺序,使得最后需要打的字母总数最少.当前单词和前一个单词相同的前面部分可以不用打, 只需打…
题意:给一个矩阵,里面有正负数,求子矩阵和的最大值 #include <iostream> #include <cstdio> #include <stdlib.h> #include <memory.h> using namespace std; ][],dp[],n,temp[]; int main() { // freopen("in.txt","r",stdin); cin>>n; ;i<=n…
Given an N*N matrix A, whose elements are either 0 or 1. A[i, j] means the number in the i-th row and j-th column. Initially we have A[i, j] = 0 (1 <= i, j <= N). We can change the matrix in the following way. Given a rectangle whose upper-left corn…
Prob.1 生活大爆炸版 石头剪刀布 模拟.代码: #include<cstdio> #include<cstring> #include<iostream> using namespace std; const int mp[5][5]={{0,0,1,1,0}, {1,0,0,1,0}, {0,1,0,0,1}, {0,0,1,0,1}, {1,1,0,0,0}}; int A[205],B[205]; int n,lA,lB,ansA,ansB; int mai…
题目描述 求所有\(n\)个点带标号强连通竞赛图中哈密顿回路数量的平均值. 题解 因为要求平均数,所以我们可以把分母和分子单开来算. \(n\)个点的所有竞赛图的所有哈密顿回路个数是可以求出来的,就是可以枚举所有哈密顿回路,然后考虑它在多少张竞赛图中出现过,也就是: \[ ans=\frac{n!}{n}2^{\binom{n}{2}-n} \] 也就是我们钦定了一条哈密顿回路之后,有\(n\)条边就固定不能选了,其他的边还是可以随便选的. 由于竞赛图强连通是竞赛图具有哈密顿回路的充分必要条件.…
累惹. B. Harvest of Apples 题目传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6333 题意:求∑(i=0,m) C(n,m). 分析:定义S(n,m)=∑(i=0,m) C(n,m).可以知道: S(n,m)=S(n,m-1)+C(n,m),S(n-m)=S(n-1,m-1)+S(n-1,m)=2*S(n-1,m-1)+C(n-1,m). 由此可以推导出,由S(n,m)到S(n-1,m),S(n+1,m),S(n,m-1),S…
3672: [Noi2014]购票 Time Limit: 30 Sec  Memory Limit: 512 MBSubmit: 1177  Solved: 562[Submit][Status][Discuss] Description  今年夏天,NOI在SZ市迎来了她30周岁的生日.来自全国 n 个城市的OIer们都会从各地出发,到SZ市参加这次盛会.        全国的城市构成了一棵以SZ市为根的有根树,每个城市与它的父亲用道路连接.为了方便起见,我们将全国的 n 个城市用 1 到…
2015 Dhaka A - Automatic Cheater Detection solution 模拟计数. B - Counting Weekend Days solution 模拟计数. C - Toll Management IV 题目描述:有一个\(n\)个点\(m\)条边的图,每条边有权值,现在给出图中一棵合法的最小生成树,问每条边权值最多增加多少,最多减少多少,使得给出的最小生成树还是最小生成树. solution 对于给定的最小生成树,最多减少多少无界,对于其它的边,最多增加…
就是求子矩阵中最大值与最小值的差... 板子都套不对的人.... #include <iostream> #include <cstdio> #include <sstream> #include <cstring> #include <map> #include <set> #include <vector> #include <stack> #include <queue> #include &…
To my boyfriend Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1246    Accepted Submission(s): 556 Problem Description Dear LiaoI never forget the moment I met with you. You carefully asked me:…
传送门 $01$规划 $01$规划优质讲解:传送门 考虑先将每一科按 $t/p$ 从小到大排序,枚举每一个 $D$(删除的考试数量) 显然一开始的成绩是 $\frac{\sum_{i=d+1}^nt[i]}{\sum_{i=d+1}^{n}p[i]}$,设它为 $st[D]/sp[D]$ 然后根据$01$规划的套路考虑把所有的成绩 $t[i]$ 减去 $st[D]/sp[D]*p[i]$ 这样做了以后,如果可以使成绩更优,那么说明区间 $[d+1,n]$ 的 $t[i]$ 的最小值小于区间 $[…
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=6052 [题目大意] 给出一个数字矩阵,求子矩阵期望数字种数 [题解] 我们统计[x,y]为其所表示的数字的最左上方的矩形数量,即该格子的贡献值, 我们用悬线法将上边界上移,调整左右边界保证[x,y]为数字左上边界, 那么x及其以下的部分都可以作为下边界,顺序统计即可, 由于障碍点的顺序设置保证了二维的偏序性,不会出现重复统计贡献. [代码] #include <cstdio> #include…
◇第4站&赛时9◇ CF Round 513 Div1+Div2 第一次在CF里涨Rating QWQ 深感不易……作blog以记之 ( ̄▽ ̄)" +Codeforces 的门为你打开+ ▶ 简单总结 莫名其妙打Atcoder比打CF要打得好些……以前CF打一场就掉一场分,直接爆炸,对CF都要绝望了. 终于这场比赛涨回来了(.^▽^) 看来比赛都向着思维难度进发了,代码实现已经不是考点了,以前背几个版就可以AK虐全场的时代也过去了,OI的路还很长,还得慢慢走…… (●'◡'●) ▶ 题目…
n<=500 * m<=500的方阵,先沿横坐标切A-1刀,再把每一块切B-1刀,得到A*B块,求这A*B块的数字之和的最小值的最大值. 最小值最大--二分,然后贪心切.每次扫一行,看这一行能不能切成满足二分值的B块,如果能就记可行横条块多一,最后看可行横条块能否到A,如不能则继续扫下一行,把没满足条件的这行并起来计算.由于需要把连续几行并起来求子矩阵和,需要预处理一波. #include<stdio.h> #include<string.h> #include<…
分析:其实很容易想到O(n^3m^3)的算法,枚举x1,x2,y1,y2,再统计一下和.求和可以用前缀和,能优化到O(n^2m^2),能得到60分.对于特殊性质的点,求一下a[i][j]与k的最小公倍数lcm,就可以推出来要选多少个点,乘法原理推一下就能解决了. 满分做法的思想是降维,先分析一下一维怎么做.问题要求满足(a[l] + a[l + 1] + ...... + a[r]) % k = 0的区间[l,r]有多少个.利用前缀和优化就是(sum[r] - sum[l - 1]) % k =…
题意:一个N * N的矩阵,求子矩阵的最大和(N <= 100, -127 <= 矩阵元素 <= 127). 题目链接:http://poj.org/problem?id=1050 -->>将二维压缩为一维.对一维进行dp求解. 将二维压缩成一维: 1.第1行 2.第2行加第1行 3.第3行加第2行加第1行 -- N.第N行加第N-1行加--加第1行 1.第2行 2.第3行加第2行 -- 1.第N行 对于一维情况.设dp[i]表示以第i个元素结尾的最大连续和,则状态转移方程为…
q次询问,每次询问能够对矩阵某一个值改变(0变1.1变0) 或者是查询子矩阵的最大面积,要求这个这个点在所求子矩阵的边界上,且子矩阵各店中全为1 用up[i][j]表示(i,j)这个点向上能走到的最长高度  若(i,j)为0 则up[i][j]值为0 同理.维护down,left, right数组 则每次查询时.从up[i][j]枚举至1作为子矩阵的高度,然后途中分别向左右扩展.若up[i][j - 1] >= up[i][j],则可向左扩展一个单位,答案为(r - l - 1) * 高度 同理…
链接:https://icpcarchive.ecs.baylor.edu/index.php? option=com_onlinejudge&Itemid=8&page=show_problem&problem=4611 题意:给一个N*N个点的矩阵(N<=6).每一个点仅仅能和周围八个点相连,问有多少种生成树的方式. 思路:题里给的非常明确.就是列一个每一个点的边的矩阵,然后求子矩阵的行列式就能够了,由于N仅仅有6,所以打表就能够了. 打表代码: #include <…
说实话不是很懂按题解怎么写,思路来源于 http://blog.csdn.net/calabash_boy/article/details/76272704?yyue=a21bo.50862.201879 写起来倒是挺短的. /* HDU 6052 - To my boyfriend [ 分析,期望 ] | 2017 Multi-University Training Contest 2 题意: 给出一个N*M的数字矩阵 求子矩阵的不同数字的个数的期望 限制 N,M <= 100 分析: 统计单…