
acm
pubgoso
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Educational Codeforces Round 76 (Rated for Div. 2) E. The Contest(线段树+模拟)
题目链接大意:给你三个数组,你 可以把任意数组的任意 元素 放到 任意数组中,使得第一个数组是前缀,第三个数组是后缀,剩下的元素在第二个数组。我们把三个东西分别记为1,2,31,2,31,2,3,那么相当于1−n1-n1−n的元素是连续 的1和连续的2和连续的3组成 。我们用暴力的思想,就是枚举两个分界点嘛。然后用数据结构优化这个暴力,先假设只有2,3,那么我们枚举2,3的分界点,记录每...原创 2019-11-28 15:07:34 · 127 阅读 · 0 评论 -
Codeforces Round #365 (Div. 2) D. Mishka and Interesting sum(思维+差分)
题目链接大意:给你一个序列,给出询问l,r区间,让你写输出现偶数次的数的异或和思路:显然区间直接的异或和是出现奇数次的数的异或和,那我们要求的是偶数次的,显然我们只需一步,把区间所有出现过的数再异或起来,两个的异或和就是答案了,因为这样做,出现奇数次的数就会被去掉剩下的就是偶数次的数了。。。。那么问题就转化为区间只出现过一次的数的异或和。先把序列离散话一下。考虑按r从小到大离线查询。。。...原创 2019-11-06 16:56:12 · 193 阅读 · 0 评论 -
Educational Codeforces Round 15 E Analysis of Pathes in Functional Graph(倍增)
题目链接大意:给你一个有向图,每个点有且只有一个出边。问你从所有点出发长经过k个点路径长度和,和最小边权。倍增处理每个点出发跳2x2^x2x点的路径上的信息即可。#include <bits/stdc++.h>using namespace std;typedef long long LL;const int N = 2e5 + 10;#define fi first...原创 2019-11-06 11:45:41 · 219 阅读 · 0 评论 -
Codeforces Round #364 (Div. 2) D. As Fast As Possible(binary search)
题目链接大意:n个人,要走l长的路,有辆车可以带k个人。人带速度v1v_1v1,车的速度v2v_2v2让你求出最短通过时间显然时间是具有单调性的,我们二分答案来check。每次用车装k个人往后走(check的值的剩余时间)一个最长的距离x1x_1x1,x1x_1x1表示车能走的最大距离,x2x_2x2人还要走的距离,tottottot已经花的时间x1v2+x2v1=mid−t...原创 2019-11-05 18:42:54 · 176 阅读 · 0 评论 -
Codeforces Round #363 (Div. 2) D. Fix a Tree(greedy+dsu)
题目链接大意:给你一个序列,让你改动最少的元素使得可以构成一个有根树。a1,a2.....ana_1,a_2.....a_na1,a2.....an表示iii节点的父亲节点,有且只有一个节点i=aii=a_ii=ai.输出改动次数和改动后的序列。思路:如果开始构不成树的话,必然存在环,同时也可能是有多个联通块,我们要做的就是把环去掉,把所有的联通块连在一起。我们由于要保证改动次数...原创 2019-11-05 13:43:22 · 170 阅读 · 0 评论 -
2019-2020 ICPC, Asia Jakarta Regional Contest E. Songwriter(贪心)
题目链接大意:给你一个序列aaa,让你构造序列bbb满足以下条件bi>bi+1,if(ai>ai+1)b_i>b_{i+1},if(a_i>a_{i+1})bi>bi+1,if(ai>ai+1)bi<bi+1,if(ai<ai+1)b_i<b_{i+1},if(a_i<a_{i+1})bi<bi+1,if(ai...原创 2019-11-04 15:06:38 · 372 阅读 · 0 评论 -
2019 acm-icpc银川站F.Function!(数学分块)
给你一个式子∑a=2n(a∑b=an⌊fa−1(b)⌋⌈fb−1(a)⌉)\sum_{a=2}^n{\left( a \sum_{b=a}^n{\lfloor f_{a}^{-1}\left( b \right) \rfloor}\lceil f_{b}^{-1}\left( a \right) \rceil \right)}∑a=2n(a∑b=an⌊fa−1(b)⌋⌈fb−1(a)⌉)让...原创 2019-10-31 12:36:36 · 1419 阅读 · 9 评论 -
2019 acm-icpc银川站K. Largest Common Submatrix 单调队列
题意:给你两个矩阵让你求出最大相同的子矩阵的面积。两个矩阵中的元素是两个1到n*m的排列思路:广告牌问题先预处理出每个元素向上最远到达的地方。然后枚举底边,对每个底遍历右边界,维护一个单调递增的单调队列,中间在维护一下每个元素最左到达的地方。每次出队的时候更新一下答案,出队的时候因为是新值小于队尾的值,所以是以自己为基准,所以更新答案是:ans=max(ans,(j−q[t].se)∗q...原创 2019-10-30 21:21:17 · 705 阅读 · 0 评论 -
luogu P2617 Dynamic Rankings 主席树套树状数组模板
题目链接树套树模板#include<bits/stdc++.h>#define fi first#define se second#define mp make_pair#define pb push_back#define LL long long#define pii pair<int,int>#define SZ(x) (int)x.size()...原创 2019-09-20 14:19:59 · 141 阅读 · 0 评论 -
Codeforces Round #494 (Div. 3) D. Coins and Queries(贪心
题目链接题目大意:给你n个物品,第iii个物品价值aia_iai,询问q次,问你能不能凑出价值为qiq_iqi的物品。小贪心吧。从大到小找,能拿就拿就行了。 #include<bits/stdc++.h>#define LL long long#define fi first#define se second#define mp make_pair#define ...原创 2019-03-01 15:40:17 · 166 阅读 · 0 评论 -
Codeforces Round #501 (Div. 3) D. Walking Between Houses
题目链接题意:给你三个数n,k,sn,k,sn,k,s,让你构造一个长度为k的数列,使得相邻两项差值的绝对值之和为sss,∑i=1na[i]−a[i−1],a[0]=1\sum_{i=1}^na[i]-a[i-1],a[0]=1∑i=1na[i]−a[i−1],a[0]=1。思路:遍历每一步,找到当前能走的步数的最大可能,然后走就好了。写这个博客是因为看cf的时候,有个远古题没补。。好像...原创 2019-03-19 13:43:13 · 94 阅读 · 0 评论 -
Codeforces Round #245 (Div. 2)A. Points and Segments (easy)(思维)
题目链接大意:给你一系列的点和区间,给每个点上一种颜色(共两种颜色),要求每个区间内的两种颜色数量的差不超过1.思路:先排序从小到大,然后按奇偶这样分布不同的颜色。这样就保证每个区间内的颜色差不超过1.妥妥的降智题啊。#include<bits/stdc++.h>#define LL long long#define fi first#define se second...原创 2019-05-06 15:03:33 · 256 阅读 · 0 评论 -
Codeforces Round #261 (Div. 2) C. Pashmak and Buses(思维+构造)
题目链接大意:n个人,d天,每个人每天都要乘车,要求任何两个人不会d天都在同一辆车上。思路:转化问题,即使任意两个人d天乘车所组成的d位k进制数不同。(一列一列看)。然后就好写了,转化成大数加法。当前列的数为前一列加一。显然的d位k进制数共有kdk^dkd个,判断是否不小于n即可。细节见代码。#include<bits/stdc++.h>#define LL long ...原创 2019-05-07 18:14:12 · 175 阅读 · 0 评论 -
Educational Codeforces Round 67 (Rated for Div. 2) E. Tree Painting
题目链接大意:给你一颗树,第一次选一个点染黑,之后从与黑点连接的白点中选点涂黑,问最大价值是多少?价值定义:每次选择涂的点可获得这个点的联通块大小的价值,简而言之就是,将黑点看为根的话,那么当前点的子树的节点数即为价值。思路:考虑换根dpdpdp,先以111为根,预处理每个点的子节点数目和染某个点的价值和。很显然,答案只与第一个点有关,与染的顺序无关,所以我们要考虑的就是每个点为第一次染的点...原创 2019-07-02 15:14:56 · 269 阅读 · 0 评论 -
Codeforces Round #524 (Div. 2)D. Olya and magical square
题目链接大意:给你一个2n∗2n2^n*2^n2n∗2n的正方形,你每次可以选择一个边长大于1的正方形等分成四份,现在让你切k次,使得左下角到右上角存在一个路径,路径上的正方形边长都相同。思路:枚举边长,判断k是否在最小最大的范围内推荐这个博客#include<bits/stdc++.h>#define LL long long#define fi first#defi...原创 2019-08-13 11:44:18 · 223 阅读 · 0 评论 -
Educational Codeforces Round 46 (Rated for Div. 2) F. One Occurrence(线段树)
题目链接大意:给你一个数组,询问一个区间仅出现一次的数。思路:我们记录每个位置x左边的第一个相同数的位置y,记为这个x的值为y,如果左边没数的话就是0,然后询问的区间必然是满足存在一个t,t∈[l,r]t,t\in[l,r]t,t∈[l,r],且f(t)<lf(t)<lf(t)<l,f(t)f(t)f(t)就是左边第一个数的位置,如果找到的这个t,那么答案就存...原创 2019-09-16 21:49:57 · 179 阅读 · 0 评论 -
VK Cup 2012 Round 1 D.Distance in Tree(点分治)
题目链接大意:给你一棵树,问你树上距离等于x的无序点对个数点分治模板题,直接做#include<bits/stdc++.h> #define fi first#define se second#define pb push_back#define mp make_pair#define LL long long#define SZ(X) X.size()#defi...原创 2019-09-16 16:06:33 · 192 阅读 · 0 评论 -
Codeforces Round #567 (Div. 2) D. Irrigation(思维+主席树)
题目链接大意:m个城市,给你前n年的举办城市,之后的每一年都会让举办次数最少且标号最小的城市举办一次,给你q组询问让你求出第k年的举办城市。思路:首先,对m个城市按举办次数从小到达排序,建一颗主席树,然后每次举办的城市显然是在一些举办次数相同且最小的城市中轮换,那我们就预处理出每种等级的城市升级到下一个等级一共需要多少次(按举办次数分等级),然后每次询问就二分一下是从哪个等级升过来的,然后在主...原创 2019-09-20 18:35:32 · 249 阅读 · 0 评论 -
luogu P3332 [ZJOI2013]K大数查询
题目链接题目大意:有N个位置,M个操作。操作有两种,每次操作如果是:1 a b c:表示在第a个位置到第b个位置,每个位置加上一个数c2 a b c:表示询问从第a个位置到第b个位置,第C大的数是多少。整体二分练习题每次二分答案 把所有操作分成左右两个部分#include<bits/stdc++.h>#define fi first#define se second...原创 2019-11-26 21:50:04 · 226 阅读 · 0 评论 -
2019 USP-ICMC
J - Weird Sanchola (贪心)我们思考一下最终的素数取什么最优,假设素数PPP,有LLL个元素小于等于PPP,有RRR个元素大于PPP,那么我们需要移动的次数就显然是P∗(L−R)−sum≤p+sum>pP*(L-R)-sum_{\leq p}+sum_{>p}P∗(L−R)−sum≤p+sum>p,我们需要最小化这个值.先将数组按从大...原创 2019-09-11 20:37:00 · 1082 阅读 · 0 评论 -
Codeforces Round #589 (Div. 2) E.Another Filling the Grid
题目链接大意:给你一个n*n的矩阵和k,让你往每个单元格填1-k的数,使得每行每列的最小值都是1.问有多少种构造方法。思路:考虑dp[i][j]dp[i][j]dp[i][j]意为,已经满足i行最小值都是1,但是有j列的最小值不是1的方案。初始dp[0][n]=1dp[0][n]=1dp[0][n]=1然后每次转移的话就是dp[i][j]dp[i][j]dp[i][j]显然是从dp[i−1...原创 2019-10-01 15:46:42 · 509 阅读 · 0 评论 -
CF1181D Irrigation Intersection of Permutations
题目链接题意:给你两个长度为n,m的排列a,b,然后让你支持两个操作:1.询问a排列上[l1,r1]区间和b排列上[l2,r2]区间相同元素的个数。2.交换b排列上c,d位置的元素思路 :我们可以建立一个长度m的数组c,其中第iii个元素表示b[i]在a中的位置,那么显然答案就是c数组[l2,r2]中值在[l1,r1]的个数了。直接上树状数组套主席树即可在线解决这个问题,注意要回收空间。...原创 2019-09-26 19:21:15 · 213 阅读 · 0 评论 -
CF1093G Multidimensional Queries
题目链接思路:把题目中的绝对值式子拆开那么答案就是max{ ∑i=1kai∗Qi+∑i=1kbi∗Qi,Qi∈{1,−1} }∵k≤5max\{~~\sum_{i=1}^ka_i*Q_i+\sum_{i=1}^kb_i*Q_i,Q_i\in \{ 1,-1\}~~\}\\\because k\leq5 max{ i=1∑...原创 2019-09-26 19:05:55 · 223 阅读 · 0 评论 -
CF457B. Distributed Join
题目链接大意:有两个数组a,b,你可以把任何一个数组的任何一个位置的元素复制到任何一个数组的任何一个位置,你需要使得两个数组中的任意两个位置(分别来自两个数组)都存在于一个相同的位置,复制的代价是元素值,问最小代价?思路:显然我们有两种策略:1.把一些位置都复制到一个位置上,那么这些位置就都满足2.对于一个数组的一个位置来说,每次选择把自己复制到另一个数组的某个位置,或者把另一个数组的某个...原创 2019-09-26 18:54:53 · 327 阅读 · 0 评论 -
CF457C C. Elections
题目链接大意:有n个人,每个人有两个参数a,ba,ba,b,表示第i−thi-thi−th人投a,让他改变注意需要b的代价。问你现在要使得投0的人最多,最少代价是多少?思路:我们枚举其他人被投的最大次数,然后把多的全部投0,剩下的不够的再加上。用一个线段树维护一下前x小的和就行了。注意要特判一下一开始就合法的情况。细节见代码:#include<bits/stdc++.h>...原创 2019-09-26 18:45:17 · 369 阅读 · 0 评论 -
CF797 E. Array Queries
题目链接题意:给以 一个数组,给你一些询问,每次询问给出p,kp,kp,k,可以执行一些操作,每次操作会使得p−>p+ap+kp->p+a_p+kp−>p+ap+k,直到p大于n,问最大操作数。思路:我们知道因为每次都会加至少k次,(假设数组全为0),然后我们根据k的大小分块计算先把k≤nk\leq \sqrt{n}k≤n的部分dp计算出来,然后询问到的时候直接O(1...原创 2019-09-26 18:39:44 · 183 阅读 · 0 评论 -
luoguP3834 【模板】可持久化线段树 1(主席树)
题目链接整体二分练习题#include<bits/stdc++.h>#define fi first#define se second#define mp make_pair#define pb push_back#define LL long long#define pii pair<int,int>#define SZ(x) (int)x.size...原创 2019-11-26 21:48:48 · 132 阅读 · 0 评论 -
luogu P2617 Dynamic Rankings
题目链接带修改的区间第k小整体二分练习题#include <iostream>#include <algorithm>#define fi first#define se second#define mp make_pair#define pb push_back#define LL long long#define pii pair<int,i...原创 2019-11-26 21:49:08 · 152 阅读 · 0 评论 -
luogu P1527 矩阵乘法
题目链接给你一个矩阵询问子矩阵的第k小整体二分练习题,就是多了一个二维前缀和,直接二维树状数组就行了#include<bits/stdc++.h>#define fi first#define se second#define mp make_pair#define pb push_back#define LL long long#define pii pair&l...原创 2019-11-26 21:49:36 · 185 阅读 · 0 评论 -
Educational Codeforces Round 50 (Rated for Div. 2) B. Diagonal Walking v.2 (思维)
题目链接大意:给你一个目标点,让你从(0,0)出发走k步到(n,m),(8个方向),问你最多能走几次斜着的,或者不能到思路:我们思考一下我们该怎么走,显然我们上来先斜着走到一个坐标为0,(从(n,m)到(0,0) ),然后我们看剩余的步数last和剩下的k,的奇偶关系。(首先要满足能走到的条件)如果两个都是偶数的话,我们显然可以直接走完k步如果last是偶数但是k是奇数的话,我们显然要把之...原创 2019-09-16 15:53:22 · 159 阅读 · 0 评论 -
Educational Codeforces Round 72 (Rated for Div. 2) E. Sum Queries? (线段树)
题目链接大意:给你n个数,支持修改和查询操作查询一个和最小的集合,使得该集合不平衡(就是不满足:集合的和的所有位上的数字等于集合中的至少一个数的同位)思路:显然我们要找到某一位上存在两个不为0的最小数,这两个数加起来就是答案。显然我们要拆分每一位建10颗线段树。具体做法:把每个数拆开,看每一位是多少,如果是0,那么贡献就是无穷大,否则就是原本的数。修改就算重新拆一下数往上但点更新即可。。...原创 2019-09-16 14:31:30 · 173 阅读 · 0 评论 -
Educational Codeforces Round 36 (Rated for Div. 2) E. Physical Education Lessons
题目链接大意:初始n天都是工作日,给你q个操作,分别是把l,r变成工作日或者非工作日。让你求出工作日的天数。思路:n很大,但操作数不大,所以我们要动态开点线段数来解决这个问题,算是裸题了。记录每个点和左右儿子节点的编号,如果是新的点就新开一个节点。其他的操作都是根普通线段树一样拉细节见代码:#include<bits/stdc++.h> #define fi first...原创 2019-09-16 14:18:24 · 188 阅读 · 0 评论 -
hdu6655 Just Repeat(贪心)
题目链接大意:两个人玩游戏,每回合一方可以放另一方没有放过的卡,谁最后没卡放谁输思路:每回合,出卡的人肯定要出场上最多的卡,这样可以使自己尽量多或者别人尽量少细节见代码:#include<bits/stdc++.h>#define LL unsigned long long#define fi first#define se second#define mp make...原创 2019-08-27 18:29:52 · 230 阅读 · 0 评论 -
hdu6686 Rikka with Travels(树的直径)
题目链接大意:给你一棵树,让你求出多少对(l,r)(l,r)(l,r),使得存在两条长度为l,rl,rl,r的链且他们不相交思路:我们直接枚举边,每条边将一棵树分成两颗,求出两棵树的分别直径即可。具体操作是:先以1为根,记录每个节点的最长向下延申长度x,和子树内前三大的x,然后就可以计算出过当前节点的最长链了,每个节点记录子树内前三大的最长链。然后就直接换根统计答案即可,把旧根的贡献给...原创 2019-08-27 18:22:32 · 301 阅读 · 0 评论 -
hdu6705
题目链接大意:给你一张有向加权图,让你求出第k小的路径思路:显然我们从大到小处理到最大的询问就可以了。先对所有点的出边按权值从小到大排序,然后塞到优先队列中,每次取出队头最小的元素更新答案,但是如果直接遍历点所有出边的话是会tle的,我们需要一个multiset来记录优先队列中的答案,如果multiset的元素等于最大的询问的话,那么我们只要更新到一个出边,使得这个路径长度和大于multis...原创 2019-08-27 18:02:27 · 524 阅读 · 0 评论 -
hdu6709 Fishing Master(思维+贪心)
题目链接大意:给你n条鱼每条鱼需要煮的时间,和抓一条鱼的时间k,你每次只能抓一条鱼,煮一条鱼,问你最少多久煮完所有的鱼。思路:显然我们必须花k的时间抓第一条鱼,而且煮鱼的时间是不能减少的,问题就是我们需要浪费多长时间,那么如果煮鱼的时间可以抓完所有的鱼,那么我们就不需要浪费时间,煮鱼时间内我们可以抓∑aik\sum\frac{a_i}{k}∑kai如果≥n−1\geq n-1≥n−1...原创 2019-08-27 17:38:44 · 579 阅读 · 0 评论 -
hdu6703 array(线段树)
题目链接大意:给你一个1-n的排列,然后支持两种操作l ,给x这个位置加上1e7l r,询问1-r位置上没出现过且大于等于r的最小值思路:我们建一颗权值线段树,维护区间元素的最大位置;首先答案肯定在1-n+1中,所以对于修改操作来说 直接单点修改成一个极大的值。询问操作我们直接询问r+1-n+1的元素出现在>l位置中的最小元素即可。因为是最小值所以我们在递归的过程中,先搜小...原创 2019-08-27 17:30:30 · 165 阅读 · 0 评论 -
RMQ模板
int dp[N + 33][21];void RMQ() { for (int i = 1; i <= n; i++) dp[i][0] = i; for (int i = 1; (1 << i) <= N; i++) { for (int j = 1; j + (1 << i) - 1 <= N; j++) { dp[j][i] =...原创 2019-08-21 21:45:24 · 145 阅读 · 0 评论 -
Educational Codeforces Round 71 (Rated for Div. 2) F.Remainder Problem(分块暴力)
题目链接思路:设f[i][j]f[i][j]f[i][j]为范围在1-800内 模i为j的所有答案然后对每个修改操作直接改,然后如果x<=800的话直接更新一下f。对于每个询问操作,小范围直接输出f[x][y],大范围直接暴力即可因为每次操作处理最多是800的所以复杂度可以保证#include<bits/stdc++.h> #define fi first#d...原创 2019-08-25 19:13:41 · 166 阅读 · 0 评论 -
hdu6685 Rikka with Coin
题目链接大意:给你一系列的数字,让你用若干个10,20,50,100的某个组合,可以组合出任意一个数字思路:xyqxyqxyq聚聚说这个是签到题,但是自闭一场我都不会做,呜呜呜分析一下,给你数字若个位数非零则显然无解。然后对有解的情况进行判断一下:我们来枚举10 20 50分别使用多少个。题解如下:然后就暴力判断是否可行,然后整百的部分直接用1美元代替即可细节见代码:#inc...原创 2019-08-20 14:43:40 · 291 阅读 · 0 评论