题面 传送门 题解 我的做法似乎非常复杂啊-- 首先最长上升子序列长度就等于把它反过来再接到前面求一遍,比方说把\(2134\)变成\(43122134\),实际上变化之后的求一个最长上升子序列和方案数就是答案了 最长上升子序列随便求求,主要是这个方案数很麻烦啊--我的做法是对每一个长度开一个动态开点线段树,然后每次在对应的长度里二分跑前缀和 其实这里完全不用动态开点线段树的,直接把权值离散一下然后一棵线段树就够了,跑得飞快 其实这里连线段树都不需要直接树状数组就可以维护前缀最大值和方案之和了…
题意 链接 Sol 势能分析. 除法是不能打标记的,所以只能暴力递归.这里我们加一个剪枝:如果区间内最大最小值的改变量都相同的话,就变成区间减. 这样复杂度是\((n + mlogn) logV\)的. 简单的证明一下:如果没有加的话,每个节点会被除至多log次, 总会除4nlogn次,每次区间加会恢复log个点的势能函数,这样总递归次数就是\(nlog^2n\). 下传标记的时候别忘了把min和max都更新一下 #include<bits/stdc++.h> #define Pair pai…
$ \color{#0066ff}{ 题目描述 }$ 给出一个长度为 \(n\) 宽度为 \(1\) ,高度无限的水箱,有 \(n-1\) 个挡板将其分为 \(n\) 个 \(1 - 1\) 的小格,然后向每个小格中注水,水如果超过挡板就会溢出到挡板的另一边,这里的水是满足物理定律的(在无挡板阻拦的情况下会向低处流),现在有 \(m\) 个条件 \((i,j,k)\),表示从左到右数的第 \(i\) 个格子中,在高度为 \(y+0.5\) 的地方是否有水, \(k=1\) 表示有水,\(k=0\…
题目描述 从前有一个贸易市场,在一位执政官到来之前都是非常繁荣的,自从他来了之后,发布了一系列奇怪的政令,导致贸易市场的衰落. 有 \(n\) 个商贩,从\(0 \sim n - 1\) 编号,每个商贩的商品有一个价格\(a_i\),有两种政令: \(l, r, c\),对于\(i \in [l, r], a_i \leftarrow a_i + c\) \(l, r, d\),对于\(i \in [l, r], a_i \leftarrow \lfloor {a_i}/{d} \rfloor\…
题面 传送门 题解 首先可以用一个矩形去套这个多边形,那么我们只要枚举这个矩形的左下角就可以枚举完所有多边形的位置了 我们先对每一个\(x\)坐标开一个\(bitset\),表示这个\(x\)坐标里哪些\(y\)坐标处有苍蝇.然后再处理出矩形中哪些位置会被覆盖,这个同样可以枚举\(x\)坐标,然后对于所有线段,如果它穿过这个\(x\)坐标,就用一个\(stack\)存起来,然后把所有\(stack\)里的\(sort\)一下,乱搞就好了(具体可以看代码) 注意只有一条线段完全穿过\(x\)才有可…
题面 传送门 题解 这么简单一道题我考试的时候居然只打了\(40\)分暴力? 如果我们把每个点的\(a_i\)记为\(deg_i-1\),其中\(deg_i\)表示有\(deg_i\)个数的\(A_i\)是\(i\),那么很明显所有数的\(a_i\)之和为\(0\) 于是,必然存在一个点\(k\),满足从\((k,k+1)\)把环断掉之后,且以\(k+1\)为开头,整个数列的前缀和不小于\(0\),也就是说精灵永远不会跨过\(k\)去找别的侏儒打架 这个\(k\)的话,只要找到前缀和最小值的地方…
题目描述 给出一个长度为 $n$ 的序列,支持 $m$ 次操作,操作有四种:区间加.区间下取整除.区间求最小值.区间求和. $n\le 100000$ ,每次加的数在 $[-10^4,10^4]$ 之间,每次除的数在 $[2,10^9]$ 之间. 题解 线段树+均摊分析 和 [uoj#228]基础数据结构练习题 类似的均摊分析题. 对于原来的两个数 $a$ 和 $b$ ( $a>b$ ) ,原来的差是 $a-b$ ,都除以 $d$ 后的差是 $\frac{a-b}d$ ,相当于差也除了 $d$…
老师说,你们暴力求除法也整不了多少次就归一了,暴力就好了(应该只有log(n)次) 于是暴力啊暴力,结果我归天了. 好吧,在各种题解的摧残下,我终于出了一篇巨好看(chou lou)代码(很多结构体党嫌丑) 那么具体除法怎么实现就是关键了 对于单个点或者区间内的数完全相同的区间,可以做成区间减法 因为除法会使数变小,而相同的数减小的量是相同的, 那么怎么判断区间内的数是否完全相同呢? 可以维护一个区间最小与区间最大,如果一个区间内最小数等于最大数,那么显然这个区间内所有数相等 区间最小与区间最大…
考虑到每次除法,然后加法,差距会变小,于是维护加法lazytag即可 #include <cstdio> #include <cmath> #define int long long int read() { int x = 0; bool f = 0; char c = getchar(); while (c < 48) f ^= (c == '-'), c = getchar(); while (c > 47) x = x * 10 + (c - 48), c =…
[LOJ 6031] 「雅礼集训 2017 Day1」字符串 题意 给定一个长度为 \(n\) 的字符串 \(s\), \(m\) 对 \((l_i,r_i)\), 回答 \(q\) 个询问. 每个询问会给定一个长度为 \(k\) 的字符串 \(w\) 以及一对 \(L,R\), 求所有满足 \(i\in [L,R]\) 的 \(w[l_i:r_i]\) 在 \(s\) 中的出现次数之和. \(n,m,k,q\le 1\times 10^5\), \(\sum |w|\le 1\times 10…
[LOJ 6030] 「雅礼集训 2017 Day1」矩阵 题意 给定一个 \(n\times n\) 的 01 矩阵, 每次操作可以将一行转置后赋值给某一列, 问最少几次操作能让矩阵全为 1. 无解输出 -1. \(n \le 1000\). 题解 首先手玩下样例就可以发现一个非常虾皮的明显性质: 因为操作是赋值而不是取或, 于是一定是先让某一行都为 1 然后用这一行去染所有不是全 1 的列. 对于构造一个全 1 的行, 如果行号为 \(k\), 那么显然是用某一行的第 \(k\) 列上的 1…
[LOJ 6029] 「雅礼集训 2017 Day1」市场 题意 给定一个长度为 \(n\) 的数列(从 \(0\) 开始标号), 要求执行 \(q\) 次操作, 每次操作为如下四种操作之一: 1 l r c 给 \([l,r]\) 区间内的值全部加上 \(c\). 2 l r d 给 \([l,r]\) 区间内的值全部除以 \(d\), 向下取整. 3 l r 求 \([l,r]\) 区间内的最小值. 4 l r 求 \([l,r]\) 区间内的值之和. \(n,q\le 1\times 10…
#6046. 「雅礼集训 2017 Day8」爷 题目描述 如果你对山口丁和 G&P 没有兴趣,可以无视题目背景,因为你估计看不懂 …… 在第 63 回战车道全国高中生大赛中,军神西住美穗带领大洗女子学院的大家打败了其他所有高中,取得了胜利,当然也就不用废校了.然而一群战车道的领导表示他们是口胡的,废校还是要废的. 军神的母亲西住志穗怒斥废校男,为了不造个大新闻,废校男承诺如果大洗学院可以打败大学队,就不用废校.(有种 OI 选手 PK ACM 选手的感觉呀)然而实力差距太大了,大洗女子学院最强…
题目描述 人的一生不仅要靠自我奋斗,还要考虑到历史的行程. 历史的行程可以抽象成一个 01 串,作为一个年纪比较大的人,你希望从历史的行程中获得一些姿势. 你发现在历史的不同时刻,不断的有相同的事情发生.比如,有两个人同时在世纪之交 11 年的时候上台,同样喜欢与洋人谈笑风生,同样提出了以「三」字开头的理论. 你发现,一件事情可以看成是这个 01 串的一个前缀,这个前缀最右边的位置就是这个事情的结束时间. 两件事情的相似度可以看成,这两个前缀的最长公共后缀长度. 现在你很好奇,在一段区间内结束的…
题目传送门 传送门 题目大意 有一个位置数列,给定$n$条线索,每条线索从某一个位置开始,一直向左或者向右走,每遇到一个还没有在线索中出现的数就将它加入线索,问最小的可能的数列长度. 依次从左到右考虑每一位上填的数. 用$f_{L, a, R, b, S}$表示正在满足向右走的线索是$L$,前$a$个字符已经满足,正在满足向左走的线索是$R$,前$b$个字符还没有满足,还未被考虑的线索集合是$S$. 主要有两种转移: 填下一个字符 如果两个线索下一个要填的字符相同,那么直接填 如果不同则还需判断…
题目传送门 唯一的传送门 题目大意 给定$n$个串,每个串只包含 ' .问是否可能任意两个不同的串不满足一个是另一个的前缀. 2-sat的是显然的. 枚举每个通配符填0还是1,然后插入Trie树. 对于Trie的每个点在2-sat中建点. 如果其中一个点被选择,那么它祖先和所有后继的结束点都不能选.(然后逆否命题连边) 对于一个包含通配符的串,通配符替换为0以及通配符替换为1的否命题等价,同样,通配符替换为1以及通配符替换为0的否命题等价(连双向边). 对于一个不包含通配符的串,直接它到的节点的…
这个题的搜索可以打到48分…… #include <cstdio> #include <cstring> #include <algorithm> ; bool must[N],in[N]; int cnt; int n,a[N][N],q[N],b[N]; inline bool judge(int len,int lim){ return lim-len>=cnt; } inline bool check(int len){ register int i,j,…
题目传送门 传送门 设 $m = \sum_{i = 1}^{n} a_i$. 总方案数显然等于 $\frac{m!}{\prod_{i = 1}^{n} a_i!}$. 考虑这样一个网格图,第 $i$ 行有 $a_i$ 个网格. 那么我们在这个网格中填 $1$ 到 $m$ ,如果保证每一行严格递增,那么第 $i$ 次移动后第 $j$ 维坐标就是第 $i$ 行中小于等于 $i$ 的数数量. 因此一条路径可以唯一对应一种填法. 路径中任意一个点都满足条件,等价于要求每一列递增. 这等价于给定杨表的…
loj 爆搜? 爆搜! 先分析一下,因为我们给出的是一个排列,然后让\(i\)给\(p_i\)连边,那么我们一定会得到若干个环,最后要使得所有点度数为1,也就是这些环有完备匹配,那么最后一定全是偶环.对于一个环,我们选点一定是隔一个选一个,所以每个环只有\(2\)种选法.如果我们先考虑长度为\(2\)的环,这种环选编号小的点显然更优,因为他要的是括号序列,左括号在越前面越好;剩下的环一定长度\(\ge 4\),那么这种环个数不超过\(\frac{100}{4}=25\)个,枚举每种环的选择情况即…
loj 注意到每次询问串长度都是给定的,并且询问串长\(k*\)询问次数\(q<10^5\),所以这里面一个东西大的时候另一个东西就小,那么考虑对较小的下功夫 如果\(k\le \sqrt{n}\),那么可以\(O(k^2)\)暴力枚举询问串的每一个子串,然后在\(S\)的sam找到这个子串对应的点,算出出现次数,并且乘上在区间\([a,b]\)中这个子串询问的出现次数.找到子串对应的点为了方便,可以依次让询问串的某个前缀在sam上匹配,然后按长度从大到小枚举前缀的后缀,从匹配位置开始倍增跳父亲…
完了感觉最近留了好多坑的说,这题也是模模糊糊地会一点 首先我们发现题目要求的是单调不上升的序列个数,那么一个套路就是用值减去下标 然后考虑连续位置的限制,这个我们做一个置换然后尽量向后取 这样拿值和位置卷积就变成了合法方案数的分子\(\times\)总方案数的分母? 感觉策不太懂啊,QQ上加了一个dalao问下细节,具体的到时候来填吧 先把CODE放了 #include<cstdio> #include<cctype> #define RI register int #define…
我可以大喊一声这就是个套路题吗? 首先看到LCP问题,那么套路的想到SAM(SA的做法也有) LCP的长度是它们在parent树上的LCA(众所周知),所以我们考虑同时统计多个点之间的LCA对 树上问题的话请出万能算法--LCT(这里准确的说应该是实链剖分),我们只需要不停地access就可以找到LCA了 然后怎么统计最后的答案,区间询问用莫队?这里的两个信息(最大值,边的虚实)显然都不能撤销 我们直接大力离线,从左往右把点一个个扔到LCT上,然后对于每个点开一个树状数组维护后缀最大值,由于这里…
完全不会的数学神题,正解留着以后填坑 将一个口胡的部分分做法,我们考虑计算格点多边形(包括三角形)面积的皮克公式: \[S=a+\frac{1}{2}b-1\text({a为图形内部节点个数,b为边界上的点数})\] 那么我们枚举每一个点,考虑算出它作为内部节点的总方案数以及作为边界上的点的方案数 然后考虑还有一个\(-1\)的常数,应该减去的是三角形的个数 所以我们大力组合容斥算出三角形个数就得到了一个优秀的\(O(nm)\)做法 正解也许是推式子+容斥,放个CODE先坑了 Python3的:…
完了我是数学姿势越来越弱了,感觉这种CXRdalao秒掉的题我都要做好久 一些前置推导 首先我们很容易得出\((a+bi)(c+di)=k \Leftrightarrow ac-bd=k,ad+bc=0\) 我们可以直接\(ad+bc=0\Rightarrow ad=-bc\Rightarrow \frac{a}b=-\frac{c}{d}\) 考虑把这个分数化为最简的形式,那么就意味着我们要把\(\gcd\)拿出来 我们令\(\frac{a}b=\frac{p}{q}(\gcd(p,q)=1)…
题意 题目链接 Sol 只会后缀数组+暴躁莫队套set\(n \sqrt{n} \log n\)但绝对跑不过去. 正解是SAM + set启发式合并 + 二维数点/ SAM + LCT 但是我只会第一种qwq 首先一个性质是两个前缀的最长公共后缀就是他们再parent树上的LCA的len 那么我们考虑每个LCA的贡献. 把询问离线下来按右端点排序,对于当前点的子树中的点有一个显然的性质. 若存在四个点\(l, x, y, r\)满足\(l < x < y < r\),那么显然\(l, r…
我可以大喊一声这就是个思博题吗? 首先如果你能快速把握题目的意思后,就会发现题目就是让你求出每个点要成为树的重心至少要嫁接多少边 先说一个显然的结论,重心的答案为\(0\)(废话) 然后我们考虑贪心处理,每次肯定要砍断以重心为根的树的大小尽量大的子树 那么至少要砍多少呢,至少\(\frac{1}{2}\)要到吧,然后就是思博的感性理解了--这是每个点要砍的边的上界 假如我们总有一种方案可以使嫁接满足条件(兴许更多,但是这个不会证啊) 那么怎么判断是否达到上界呢,很简单,先取了必要的然后看剩下的有…
我可以大喊一声这就是个SB题吗? 首先讲一句如果你像神仙CXR一样精通搜索你就可以得到\(80pts\)(无Subtask)的好成绩 我们考虑挖掘一下题目的性质,首先发现这是一个置换,那么我们发现这的显然会成环 然后我们发现那个度数的性质其实就是告诉你环上的点必须左右括号相间 换而言之一个环其实只有两种状态,那么我们对于每一个环进行搜索的复杂度显然就是\(O(2^{\frac{n}{2}}n)\) 那么考虑\(n=100\)要怎么卡过去.我们发现一个长度为\(2\)的环显然必须令前面的为左括号,…
题意 链接 Sol 第一次做在二分图上博弈的题..感觉思路真是清奇.. 首先将图黑白染色. 对于某个点,若它一定在最大匹配上,那么Bob必胜.因为Bob可以一直沿着匹配边都,Alice只能走非匹配边.到最后一定是Alice不能移动. 否则Alice必胜.这个我不会证,但是又举不出反例来qwq.手玩了几个数据发现Alice总会有一种方法走某个非匹配边干掉Bob. 那么如何找不一定在最大匹配上的点呢?首先求出一个最大匹配,结论是从所有不在最大匹配上的点开始dfs,通过交叉边(目标点的匹配边)走到点都…
题意 链接 Sol 神仙题+神仙做法%%%%%%%% 我再来复述一遍.. 首先按照\(y\)坐标排序,然后维护一个扫描线从低处往高处考虑. 一个连通块的内状态使用两个变量即可维护\(ans\)表示联通块内的最大答案,\(f\)表示联通块内\(k=1\)的数量 若当前的水超过了当前的挡板,那么将当前联通块和下一个位置所在的联通块合并. 若是一个\(k=0\)的操作,则一定满足. 若是\(k=1\)的操作,那么就将\(f++\),然后更新一下答案. #include<bits/stdc++.h>…
题意 链接 Sol \(10^5\)次询问每次询问\(10^5\)个区间..这种题第一感觉就是根号/数据分治的模型. \(K\)是个定值这个很关键. 考虑\(K\)比较小的情况,可以直接暴力建SAM,\(n^2\)枚举\(w\)的子串算出现次数.询问用个\(n^2\)的vector记录一下每次在vector里二分就好. \(K\)比较大的情况我没想到什么好的做法,网上的做法复杂度也不是很好.. 然后写了个广义SAM + 暴力跳parent就过了.. 不过这题思想还是很好的 #include<bi…