摘要:
1176: [Balkan2007]Mokia Description 维护一个W*W的矩阵,初始值均为S.每次操作可以增加某格子的权值,或询问某子矩阵的总权值.修改操作数M<=160000,询问数Q<=10000,W<=2000000. 维护一个W*W的矩阵,初始值均为S.每次操作可以增加某格子的 阅读全文
摘要:
显然,暴力求解的复杂度是无法承受的。 考虑这样的一种暴力,我们把 z 到根上的点全部打标记,对于 l 到 r 之间的点,向上搜索到第一个有标记的点求出它的深度统计答案。观察到,深度其实就是上面有几个已标记了的点(包括自身)。所以,我们不妨把 z 到根的路径上的点全部 +1,对于 l 到 r 之间的点 阅读全文
摘要:
1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 const long long N=100010; 8 long long cnt,head[N]; 9 long long size[N],fa[N],ff[N][30],son[N],dep[N... 阅读全文
摘要:
题意 给棵n个点的树。边有边权然后有三种操作 1、CHANGE i v 将编号为i的边权变为v 2、NEGATE a b 将a到b的所有边权变为相反数。 3、QUERY a b 查询a b路径的最大边权。 (n,q<=10000) 题解 树剖裸题。 边权下放。线段树记录最大值最小值即可。 阅读全文
摘要:
题意 给一个只有1和2的序列,每次询问有没有一个子串的和为x ( 1≤n,m≤1 000 000 )kkk ( 1≤k≤2 000 000 ) 题解 我觉得是道好题。 主要是证明一个性质:假如有一个字串的和为偶(奇)数,那么小于这个偶(奇)数的所有偶(奇)数一定等于这个串的某个字串的和。 我们考虑这 阅读全文
摘要:
题意 给定一个长度为n的序列,你有一次机会选中一段连续的长度不超过d的区间,将里面所有数字全部修改为0。请找到最长的一段连续区间,使得该区间内所有数字之和不超过p。 (1<=d<=n<=2000000,0<=p<=10^16) 题解 一看以为是DP结果想了半天想不出来。(其实有点像) 然后又以为是单 阅读全文
摘要:
题意 给出N个正整数a[1..N],再给出一个正整数k,现在可以进行如下操作:每次选择一个大于k的正整数a[i],将a[i]减去1,选择a[i-1]或a[i+1]中的一个加上1。经过一定次数的操作后,问最大能够选出多长的一个连续子序列,使得这个子序列的每个数都不小于k。M组询问 n<=1000000 阅读全文
摘要:
题意 给定k,n,和n*n的矩阵,求一个子矩形满足权值和在[k,2k]之间 , 题解 这里用到了极大化矩阵的思想。推荐论文《浅谈用极大化思想解决最大子矩阵问题》Orz 如果有一个元素在[k,2k]之间。直接输出就好。 否则。把所有大于2k的元素作为障碍点。 求每一个最大化矩阵。(用单调队列) 如果这 阅读全文
摘要:
题意 给一棵树,你可以匹配有边相连的两个点,问你这棵树的最大匹配时多少,并且计算出有多少种最大匹配。 N≤1000,其中40%的数据答案不超过 108 题解 显然的树形DP+高精。 这题是作为考试题考的,因为记得有一次考试,状态用两个数组存。 所以看到这题瞬间想到状态dp[i][0/1]代表以i为根 阅读全文
摘要:
题意 给定一个n个点的无向图,要求将点集分成大小相等的两个子集,使两个子集之间的边数最少 (n<=26) 题解 一开始想了半天DP发现不会,去看题解全是搜索。 所以发现C(1326)可以过我就写搜索了。 这个搜索重点在于如何快速求出两个集合的交集有多少元素。 可以预处理规模为n/2的集合的元素数记为 阅读全文
摘要:
题意 n天。第i天上午会进货Ai件商品,中午的时候会有顾客需要购买Bi件商品,可以选择满足顾客的要求,或是无视掉他。 如果要满足顾客的需求,就必须要有足够的库存。问最多能够满足多少个顾客的需求。 (n<=250000) 题解 一看就知道是贪心。 我们把选择的每一天扔到一个堆里,按Bi从大到小排序。 阅读全文
摘要:
题意 2n 个数站成两排(每个数在 2n个数中最多出现两遍),一次操作可以交换任意一列中两个数,求使每行数不重复的最少操作数。 (n<=50000) 题解 说实话,我真没想到图论。(我太菜了) 一开始以为是DP,写了一遍然后被自己的数据秒卡。 其实我已经发现选择的方案有依赖性,可是就是没想到图论。 阅读全文
摘要:
题意 N个矩形,排成一排. 现在希望用尽量少的矩形海报Cover住它们. (n<=250000,wi,di<=109) 题解 这种一堆矩形,又不像数据结构的题,一般都是单调栈。 考虑一个贪心:对于一个高度,一定要取得尽量宽。 像这样: 然后我们用单调栈求出左边最后一个高度大于等于它的和右边最后一个高 阅读全文
摘要:
题意 有n个车站,现在有一辆火车从1到n驶过,给出aij代表从i站上车j站下车的人的个数。列车行驶过程中你有K次检票机会,所有当前在车上的人会被检票,问最多能检多少个不同的人的票 (n<=600,k<=50) 题解 一开始没啥思路,然后瞄了一眼题解。看到了前缀和然后就想前缀和的意义。 结果又没什么收 阅读全文
摘要:
题意:给你一个长度为n的序列,有m个操作,写一个程序支持以下两个操作: 1. 修改一个值 2. 给出三个数l,r,k, 询问:如果把区间[l,r]的数从小到大排序,能否形成公差为k的等差数列。 n,m≤300000 0≤k,a[i]≤109 题解 这题坑我很久。 一眼望去这题不可作。(倒是想到维护最 阅读全文