自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(34)
  • 收藏
  • 关注

转载 gym102201F_Fruit Tree

题意给一棵带权树,多次询问路径上出现次数超过一半的数。分析dfs序建主席树,维护的就是根到某个节点这段路径的值域情况。因为题目所求的不是一般的众数,而是出现次数大于一半的,所以在主席树上可以直接二分,看两个子树的值域哪个大于一半,就走哪个子树,如果都为一半,返回-1。树上主席树的查询不同于序列上的主席树,不是子树做差,而是子树相加减去两倍LCA对应的树,然后这样减去之后会把L...

2019-09-27 16:56:00 248

转载 2019ccpc秦皇岛站赛后总结

队友实力带飞,摸了个银尾,给今年的比赛开了个好头。热身赛发现位置在最后一行,好像可以走来走去还不错。ubuntu16.04+cb,大概配置了字体大小,简单的自动补全。A题是签到题,一车人过了,不过因为我在调ide所以没看题,然后队友就写了数位dp然后发现假了,其实是暴力枚举就行了。D是娱乐题,B据说是个二分答案+dp,没搞出来,C只过了两个队?然后就溜了。正式赛D...

2019-09-23 23:37:00 190

转载 Codeforces1093E_Intersection of Permutations

题意给定两个排列a和b,两种操作,交换b_i和b_j,询问a[l_a...r_a]和b[l_b...r_b]有多少个数相同。分析由于给的是排列,保证b的每个数都有a的对应,构造数组c,c[i]表示b[i]在a数组中的位置。所以询问就变成询问c[l_b...r_b]中有多少个值域为[l_a...r_b]的数,树套树...内层的权值线段树动态开点一不小心就RE在第22个点,写了可...

2019-09-11 23:37:00 302

转载 bzoj2141_排队

题意给定\(n\)个数,每次交换两个数,输出交换后的逆序数。分析交换两个数只会影响到对应区间内的逆序数,具体为减少区间\([l+1,r-1]\)中比\(a[r]\)大的数的个数,增加比\(a[r]\)大的数的个数,减少比大的数的个数,\(a[l]\)增加比\(a[l]\)小的数的个数。转化为单点修改+查询区间值域个数,树套树。思路不难想,写完调了一年,注意几个点外层bit...

2019-09-10 23:00:00 97

转载 2019icpc徐州网络赛_I_query

题意给定一个序列,多次询问区间\([l,r]\)中满足\(min(a[i],a[j])==gcd(a[i],a[j])\)的数对\((i,j)\)数。分析其实就是求区间有倍数关系的数对数。由于序列是全排列,所有有倍数关系的数对数只有\(nlogn\)个,因此可以暴力求出所有数对,然后对询问离线,转化为二位偏序的问题,使用树状数组解决即可。树状数组求逆序对其实就是求\(i&lt...

2019-09-10 13:28:00 126

转载 2019icpc南昌网络赛_I_Yukino With Subinterval

题意给定一个序列,两种操作,单点修改,询问区间\([l,r]\)值域在\([x,y]\)范围内的连续段个数。分析原数组为\(a\),构造一个新的数组\(b\),\(b[i]=(a[i]==a[i-1])?0:a[i]\),这样将连续段转化为左端点的一个数来表示。询问就可以转化为维护\(b\)数组,单点修改和询问区间在某个值域内的数的个数,用树状数组套权值线段树。类似于差分的思...

2019-09-10 12:49:00 116

转载 2019icpc徐州网络赛

A Who is better?题意excrt+斐波那契博弈分析Java的BigInteger对象默认为null,不能直接比较。代码import java.math.BigInteger;import java.util.Scanner;public class Main { static int n; static BigInteger[] a=new...

2019-09-07 18:52:00 190

转载 2018icpc宁夏邀请赛_L_Continuous Intervals

题意给定一个序列,定义连续区间为区间的数排序后,任意两个相邻的数之差不超过1。分析假设区间最大值为\(max\),最小值为\(min\),不同数个数为\(cnt\),那么问题转化为求满足\(max-min-cnt==1\)的区间个数。统计满足条件的区间个数可以考虑用线段树,主要有三个步骤:枚举右端点\(R\)线段树维护当前所有左端点,即每个叶子节点\((i,i)\),表示...

2019-09-06 14:33:00 167

转载 2019icpc南京网络赛_F_Greedy Sequence

题意题意不明,队友告诉我对于每个\(i\),所在下标\(p[i]\),在\([p[i]-k,p[i]+k]\)中找到小于\(i\)的最大数\(x\),然后\(ans[i]=ans[x]+1\)即可。分析第一种方法无脑主席树,求区间小于某个值的最大数。第二种方法是线段树,因为对于每个数\(i\),只有比他小的数才有用,所以从小到大枚举,在线段树中(此时所有值都小于\(i\)),查...

2019-09-01 20:47:00 120

转载 luoguP3261_[JLOI2015]城池攻占

题意有一棵树\(n\)个节点,每个节点有一个防御值,以及两个属性,表示一个骑士占领该节点后攻击值是加还是乘,有\(m\)个骑士,有初始位置和初始攻击值,如果攻击值大于该节点的防御值,就能占领该节点,然后更新攻击值,走到父节点,如果攻击值小于防御值,骑士就会死在该节点。问每个骑士能占领多少个节点,以及每个节点分别有多少个骑士死在那里。分析第一个问题,考虑对每一个节点,如果我们能知...

2019-09-01 11:13:00 82

转载 poj3415_Common Substrings

题意给定两个字符串,求长度大于等于k的公共子串数。分析将两个字符串中间加个特殊字符拼接,跑后缀数组。将题目转化为对每一个后缀求\(\sum_{j=1}^{i-1}lcp(i,j)\),且后缀\(i\)和\(j\)属于不同字符串。由于\(lcp\)只跟\(h\)数组的区间最小值有关,因此对于单调递减的\(h[i]\)我们可以合并贡献和个数,维护一个单调栈。分别统计\(a\)串...

2019-08-25 21:24:00 84

转载 2019CCPC网络赛

hdu6703 array题意给定一个1到\(n\)的全排列,两种操作,将\(a_{pos}\)修改为\(a_{pos}+1000000\),询问第一个大于等于\(k\)的且不在\(a_1...a_r\)的数。分析由于\(k<=n\),因此操作二询问的答案最大是\(n+1\),因此操作一就相当于删去一个数。考虑用权值线段树维护下标(权值区间下标最大值),操作一就将下标置...

2019-08-25 09:31:00 149

转载 2018icpc宁夏邀请赛网络赛_G_Trouble of Tyrant

题意一列\(n\)个点,给定一个特殊的图,有两种边\(E(1,i)\)和\(E(i-1,i)\),多个询问,每次给一个\(d\),求所有路径长度加上\(d\)后1到\(n\)的最短路。分析首先这图很特殊,大胆猜测不是图论。1到\(n\)的最短路包括\(p_i\),即1直接到\(i\)的距离,\(i\)作为中转点,加上\(dis_{i,n}\),即\(i\)一直往后走到\(n\)...

2019-08-23 11:09:00 128

转载 luoguP2444_[POI2000]病毒

题意给定多个01模式串,问是否存在一个无限长的字符串不包含任何一个模式串。分析好像数据有点水,网上一大堆题解连样例都没过???多模式串,先把AC自动机建出来再说。反向考虑,若存在一个无限长的字符串不包含任何一个模式串,那就说明这个字符串可以在AC自动机上无限匹配,所以我们在AC自动机上dfs找环即可。代码#include <bits/stdc++.h>us...

2019-08-22 10:41:00 71

转载 uoj218_火车管理

题意\(n\)个位置,每个位置一个栈,三种操作,询问区间栈顶的和,区间入栈某个数,单点出栈某个数。分析用一个线段树来维护栈顶的和,区间(单点)更新和区间询问。用一个主席树来维护每个位置最新一次入栈的时间,即主席树存的是时间,然后取出的时间也能作为主席树的下标来访问对应时间的版本。因此区间入栈的时候区间更新线段树和区间更新主席树。单点出栈时,先查询这个位置栈顶元素的入栈时间,...

2019-08-21 20:25:00 199

转载 luoguP3588_[POI2015]PUS

题意有一个\(n\)个数的序列,已知其中的\(k\)个数,然后有\(m\)个信息,每个信息给出区间\([l,r]\),和\(k\)个数,表示区间\([l,r]\)中这\(k\)个数大于剩下的\(r-l+1-k\)个数,求出一个方案。分析抄做的第一题线段树优化建图的题目,很巧妙。大小关系我们可以看成是一条有向边,由小数连向大数,而两数之差就是边权,最后跑一遍拓扑排序,从最小的值更...

2019-08-20 18:33:00 86

转载 2019牛客多校第十场

B Coffee Chicken题意定义一个字符串的斐波那契数列,求从第k位开始的后面十个字符。分析把第n项求出来是不可能的。斐波那契数列的增长是很快的,而且由于题目保证\(k<=min(|S(n)|,10^{12})\),且只输出十个字符,因此其实只有前几十项是有用的。把前面几十项的长度和字符串预处理出来,然后分治输出即可。代码#include <bit...

2019-08-19 19:01:00 88

转载 luoguP4578_ [FJOI2018]所罗门王的宝藏

题意一个n*m的矩阵,初始值全为0,每一行每一列操作一次可以加1或者减1,问能否操作得到给定矩阵。分析行和列的分别的加减是可以相互抵消的,因此我们只需要考虑行的加和列的减。对于给定矩阵每一个数\(x\),假设对应行\(u\)加上\(r_u\)次,对应列\(v\)减去\(c_v\)次,即\(r_u+c_v=x\),转化为不等式,即\[r_u-c_v<=x\\c_v...

2019-08-16 16:29:00 132

转载 2019牛客多校第九场

D Knapsack Cryptosystem题意求一个有唯一解的超大01背包的方案。分析使用折半搜索,前18个数先dfs爆搜求出所有可能的方案,存到map里,再爆搜后18个数,从map里查询即可。代码#include <bits/stdc++.h>using namespace std;typedef long long ll;int n;ll s,a[...

2019-08-15 20:36:00 94

转载 【算法学习】尺取法

基础模板求和大于等于S的最小子段ll sum=0;int l=1,r=1;while(true){ //全速推进r指针 while(r<=n && sum<s){ sum+=a[r++]; } //r走到头,sum无法再增大,答案无法更优 if(sum<s){ break...

2019-08-15 08:36:00 130

转载 2019牛客多校第八场

A All-one Matrices题意求所有极大全一矩阵的个数。分析预处理每个点向下延伸的高度值,同一行再用单调栈预处理每个高度作为最小值能延伸的左右边界。枚举每个1的点,先判断这个点的高度左右延伸覆盖的区间是否在前面已被覆盖过(即已统计过),如果否,再判断对应这段覆盖区间的上一行是否全1,如果是,那么就是上一行已统计过,否则就答案++。加上每一行用map判断是否重复覆盖...

2019-08-10 19:02:00 90

转载 2019牛客多校第五场

digits题意给定一个n,要构造一个数,本身是n个倍数,每一位的数加起来也是n的倍数。分析输出n个n即可,显然可以整除得到1..0..1..0..1,而且无论每一位上的数是什么,个数都是n个倍数,因此和可以整除n。代码#include <bits/stdc++.h>using namespace std;int t,n;int main(){ sc...

2019-08-09 14:06:00 117

转载 2019牛客多校第七场

A String题意给定一个01串,求最少的划分次数,使得每部分的01串都是循环字典序最小。分析从最长的整个串贪心,暴力判断是否是循环字典序最小,若是,直接输出前面的串,然后后面的串再进行新一轮判断。代码#include <bits/stdc++.h>using namespace std;const int N=205;int T;string s;v...

2019-08-09 13:44:00 87

转载 Codeforce1196_D_F

D RGB Substring题意给定一个只含RGB三种字符的字符串,问最少修改多少个字符,能使得修改后的字符串存在一个长度为\(k\)的子串是...RGBRGB...这个循环字符串的子串。分析只含有3种字符,考虑从...RGBRGB...这个循环字符串大力枚举。子串要和这个循环字符串匹配只有三种情况,即开头是RGB,GBR和BRG。预处理出这三种匹配的字符匹配个数的前缀和...

2019-08-06 21:27:00 116

转载 2019牛客多校第六场

A Garbage Classification题意给定一个字符串代表垃圾,26个字符每个字符代表某种组成成分,根据题意判断垃圾类别。分析温暖的签到题,注意别写成除法就行。代码#include <bits/stdc++.h>using namespace std;const int N=2050;int T;char s[N];char let[30];...

2019-08-05 08:58:00 103

转载 2019牛客多校第三场

B Crazy Binary String题意给一个01字符串,求0和1个数相同的最长子序列和子串长度。分析子序列长度就是\(min(cnt(0),cnt(1))*2\),子串的长度也是原题,记录一下0和1个数差的前缀和,然后用一个数组记录前面扫过的0个数和1个数差值的最左位置,前缀和的思想更新答案即可。代码#include <bits/stdc++.h>usi...

2019-07-28 11:01:00 116

转载 2019牛客多校第四场

A meeting题意给一棵树,以及树上的\(k\)个点,要求一个点使得这k个点到这个点的最大距离最小。分析简单的做法就是求出这\(k\)个点在树上的最远距离,类似于求树直径的做法,然后点肯定取在直径一半处。代码#include <bits/stdc++.h>using namespace std;const int N=1e5+50;int n,k,u,v...

2019-07-27 21:23:00 64

转载 2019杭电多校第二场

6595 Everything Is Generated In Equal Probability题意给定一个\(n\),从\([1,n]\)中等概率取出一个数,再等概率生成一个\(n\)的全排列,再计算这个全排列的函数值,求这个函数值的期望。函数表达为输入一个全排列,计算其逆序数,再等概率取出一个子序列(可以是空,可以是原序列),递归计算该子序列的函数值,累加返回。分析暴力...

2019-07-26 21:46:00 151

转载 hdu3416+hdu6582(最短路+最大流)

题意hdu3416:给一个图,边不能重复选,问有多少个最短路hdu6582:给一个图,问最少删除边权多少的边后,最短路长度增加分析边不能重复选这个条件可以想到边权为1,跑最大流,所以我们可以先跑出最短路,再把最短路中的边作为网络流中的边跑一遍最大流即可。最短路长度增加即最短路这个子图不再联通,要使一个图不再联通的最小代价显然就是最小割,也等于最大流。找出最短路中的边的方法...

2019-07-26 19:53:00 111

转载 2019杭电多校第一场

6581 Vacation题意从右到左分别为0-n辆车,每辆车有长度l,起始位置s和速度v,0坐标在左边,不能超车,单车道,问0号车到达0坐标的最短时间。分析最短时间考虑二分时间,然后按这个时间从左边第一辆车开始依次计算最终位置,最后判断0号车的位置即可。代码#include <bits/stdc++.h>using namespace std;const i...

2019-07-26 19:52:00 77

转载 【算法学习】单调队列

基础模板求区间最大值最小值之差在[L,R]范围内的最长区间长度int l=1;int l1=1,r1=0;int l2=1,r2=0;int ans=0;for(int r=1;r<=n;r++){ //删除队尾元素再入队,使满足单调性 while(l1<=r1 && a[r]>a[mxq[r1]]){ r...

2019-07-26 11:11:00 197

转载 2019牛客多校第二场

A Eddy Walker题意一个0到n-1的环,初始在0,每次随机前进或后退一格,当所有点都访问过就结束,问结束时站在k的概率是多少。(注意输出的是前缀积)分析一开始站在0,最后显然不可能在0,剩下n-1格,随机数打表发现概率相同,都为\(\frac{1}{n-1}\)代码#include <bits/stdc++.h>using namespace std;...

2019-07-25 11:17:00 77

转载 【算法学习】回文树

#include <bits/stdc++.h>using namespace std;const int N=1e5+50;struct PT{ //回文树中每个节点表示一个回文串,所以有偶数长度的树和奇数长度的树两棵 //next指针 next[u][i]表示u节点左右添加字符i之后得到的回文串节点 int next[N][26]; ...

2019-07-25 11:11:00 101

转载 2019牛客多校第一场

A Equivalent Prefixes题意给两个序列a和b,找出最大一个位置p,使得两个序列1-p的子序列中,任意区间的最小值位置相同。分析最小值的位置考虑用单调栈预处理出每个数作为最小值的最左和最右的位置,然后从1开始枚举,对于某个位置i,如果\(a_i\)和\(b_i\)作为最小值覆盖区间的左端点不同,那么肯定不行,直接break,因为如果选择这个作为p,显然存在一个区间...

2019-07-25 08:45:00 123

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除