摘要:预处理last[i]表示以第i个开始,的合法后缀。 pre[i]表示以第i个结尾,的合法前缀。 那么每一个数a[i],肯定是一个合法后缀last[i] + 一个合法前缀,那么合法前缀的数字要小于a[i],并且最大,bit维护小于等于val的最大值即可。 #include <cstdio> #incl
阅读全文
摘要:http://oj.xjtuacm.com/problem/14/ wmq的队伍 发布时间: 2017年4月9日 17:06 最后更新: 2017年4月9日 17:07 时间限制: 2000ms 内存限制: 512M 描述 交大上课需要打卡,于是在上课前的几分钟打卡机前往往会排起长队。 平时早睡早起
阅读全文
摘要:http://codeforces.com/problemset/problem/12/D 这里的BIT查询,指的是查询[1, R]或者[R, maxn]之间的最值,这样就够用了。 设三个权值分别是b[1], b[2], b[2]; 首先,先把b[1]值离散化,离散成一个个id,那么只能是在id比较
阅读全文
摘要:http://acm.zju.edu.cn/onlinejudge/showContestProblem.do?problemId=5564 根据它的定义是行最小,列最大。 可以证明鞍点是唯一的。 单独考虑每一个元素的贡献,它能成为鞍点的情况有: 1、在这一行中,<= a[i][j]的元素肯定要删除
阅读全文
摘要:http://codeforces.com/gym/101257/problem/G 首先要看到题目,题目是本来严格大于score[i] > score[j]。然后score[i] < score[j],的才算做是贡献。 然后这题需要一个小观察,就是只有低分的,不fail,然后高分的,fail了,才
阅读全文
摘要:这题如果用二维树状数组,则会直接爆内存。 那么可以运用扫描线的思路。 就是,它同时被x和y限制了,那么可以在查询的时候,确保x先满足了,(把x按小到大排序) 然后就相当于是关于y的一个一维bit了, 注意同一个点它询问两次。 82 21 11 21 31 41 52 10 121 1 #includ
阅读全文
摘要:http://poj.org/problem?id=2155 二维树状数组,其实就是c[maxn][maxn],就是n个一维树状数组,然后,在这一维树状数组里面,再套一个一维树状数组。 所以c[1][1]维护的是第一行的树状数组的前1个,c[1][2]是第一行树状数组的前2个,也就是a[1][1]
阅读全文
摘要:https://www.hackerrank.com/contests/101hack45/challenges/polynomial-division 询问一个多项式能否整除一个一次函数。a * x + b 注意到如果能整除,就比如是x^2 + 2 * x + 1能整除2 * x + 2 那么它必
阅读全文
摘要:http://codeforces.com/contest/755/problem/D // 我也觉得非平面图不能用欧拉公式,但是也能过,不知道为什么。求大佬留言。 这题其实就是平面图,因为它有很多个交点。中途的交点使得图的阶数变大了 所以我的思路就是求出V、E、然后解出F。V - E + F =
阅读全文
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=2227 用dp[i]表示以第i个数为结尾的nondecreasing串有多少个。 那么对于每个a[i] 要去找 <= a[i]的数字那些位置,加上他们的dp值即可。 可以用树状数组维护 #include <cstd
阅读全文
摘要:Super Mario Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 5560 Accepted Submission(s): 2532 Pro
阅读全文
摘要:可以把每个公式都化简,然后得到要维护的东西就是平方和,和前缀和,两个bit即可 不能cin,超时。IOS后都不行。 scanf用lld #include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include
阅读全文
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=5869 题意:给定一个数组,然后给出若干个询问,询问[L, R]中,有多少个子数组的gcd是不同的。 就是[L, R]中不同区间的gcd值,有多少个是不同的。 给个样例 3 37 7 71 21 33 3 数学背景
阅读全文
摘要:http://codeforces.com/contest/101/problem/B 给定一个数n,起点是0 终点是n,有m两车,每辆车是从s开去t的,我们只能从[s,s+1,s+2....t-1]处上车,从t处下车。, 问能否去到点n,求方案数 设L[x]表示有多少辆车能够到达x处。 只能从t处
阅读全文
摘要:http://acm.hdu.edu.cn/listproblem.php?vol=49 给定一颗树,然后对于每一个节点,找到它的任何一个祖先u,如果num[u] * num[v] <= k。则贡献加1 思路:主要的麻烦就是动态修改前缀和了。因为对于每个数字val。则找它祖先的话, <= k / v
阅读全文
摘要:多次修改一棵树节点的值,或者询问当前这个节点的子树所有节点权值总和。 首先预处理出DFS序L[i]和R[i] 把问题转化为区间查询总和问题。单点修改,区间查询,树状数组即可。 注意修改的时候也要按照dfs序修改,因为你查询就是按照dfs查的,所以修改也要用dfs序修改 L[i]是唯一的。 #incl
阅读全文
摘要:找规律发现只要找到两个相同数字之间,有多少个不同的数字,即为答案。 可以用树状数组离线处理。 坑点是卡有很多张,没用完的情况,后面的卡直接放在哪里, 就是 10 5 1 2 3 4 5 这样 开始数据要输出到10 #include <cstdio> #include <cstdlib> #inclu
阅读全文
摘要:给出q个询问,询问一段区间里面的不同元素的个数有多少个。 离线做,用树状数组。 设树状数组的意义是:1--pos这个段区间的不用元素的种类数。怎么做?就是add(pos,1);在这个位置中+1,就是说这个位置上元素种类+1。 然后先把询问按R递增的顺序排序。因为这里是最优的,我每次尽量往R靠,使得查
阅读全文
摘要:给定一段冒泡排序的代码,要求输出每个数字能到达的最右边的位置和最左边的位置的差 因为那段冒泡排序的代码是每次选取一个最小的数,放在左边的,所以,每个数最多能到达右边的位置应该是起始位置i+右边有多少个数比它大。 它能到达的最左的位置,可以这样考虑 1、它本来应该是排去起始位置的左边的,就是它本来是一
阅读全文
摘要:题目,要求找出有多少对这样的东西,四个数,并且满足num[a]<num[b] &&num[c]>num[d] 要做这题,首先要懂得用树状数组,我设,下面的小于和大于都是严格的小于和大于 dpL_min[i]:表示在第i个数往左,(不包括第i个),有多少个数是少于num[i]的 dpL_max[i]:
阅读全文