loj2055 「TJOI / HEOI2016」排序】的更多相关文章

ref #include <iostream> #include <cstring> #include <cstdio> using namespace std; int n, m, a[100005], sum[400005], tag[400005], q; struct Node{ int opt, lll, rrr; }nd[100005]; void pushDown(int o, int l, int r, int lson, int rson, int m…
#2055. 「TJOI / HEOI2016」排序   题目描述 在 2016 年,佳媛姐姐喜欢上了数字序列.因而他经常研究关于序列的一些奇奇怪怪的问题,现在他在研究一个难题,需要你来帮助他. 这个难题是这样子的:给出一个 1 11 到 n nn 的全排列,现在对这个全排列序列进行 m mm 次局部排序,排序分为两种: (0,l,r) (0, l, r)(0,l,r) 表示将区间 [l,r] [l, r][l,r] 的数字升序排序 (1,l,r) (1, l ,r)(1,l,r) 表示将区间 …
题解 看错题了,我以为是询问Q是个数字,问它在哪个位置 我一想这不直接01序列搞一下就好了嘛(事实上是012) 然后呢,我发现样例没过. 啊我看错题了,问的是Q这个位置是啥-- 哦,套用我之前的想法不是直接拿线段树维护01序列然后二分吗--(可以不用012,直接是0表示小于等于mid的值,1表示大于mid的值) 哎我要是没看错题这题我是不是做不出来啊 代码 #include <bits/stdc++.h> #define enter putchar('\n') #define space pu…
题目链接 loj#2054. 「TJOI / HEOI2016」树 题解 每次标记覆盖整棵字数,子树维护对于标记深度取max dfs序+线段树维护一下 代码 #include<cstdio> #include<algorithm> inline int read() { int x = 0,f = 1; char c = getchar(); while(c < '0' || c > '9')c = getchar(); while(c <= '9' &&…
「TJOI / HEOI2016」字符串 题目描述 佳媛姐姐过生日的时候,她的小伙伴从某东上买了一个生日礼物.生日礼物放在一个神奇的箱子中.箱子外边写了一个长为 \(n\) 的字符串 \(s\),和 \(m\) 个问题.佳媛姐姐必须正确回答这 \(m\)个问题,才能打开箱子拿到礼物,升职加薪,出任 \(CEO\),嫁给高富帅,走上人生巅峰.每个问题均有 \(a,b,c,d\) 四个参数,问你子串 \(s[a-b]\) 的所有子串和 \(s[c-d]\) 的最长公共前缀的长度的最大值是多少?佳媛姐…
#2054. 「TJOI / HEOI2016」树 思路: 线段树: 代码: #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; #define maxn 100005 #define maxm maxn<<1 #define maxtree maxn<<2 int n,head[maxn]…
#2057. 「TJOI / HEOI2016」游戏 思路: 最大流: 代码: #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; #define INF 0x3f3f3f3f #define maxn 2000005 ; ][],idl[][],E[maxn],V[maxn],head[maxn]; ][]; ]…
loj2058 「TJOI / HEOI2016」求和 NTT 链接 loj 思路 \[S(i,j)=\frac{1}{j!}\sum\limits_{k=0}^{j}(-1)^{k}C_{j}^{k}(j-k)^{i}\] \[\sum\limits_{i=0}^{n}\sum\limits_{j=0}^{i}S(i,j)·2^j·j!\] \[\sum\limits_{i=0}^{n}\sum\limits_{j=0}^{n}S(i,j)·2^j·j!\] \[\sum\limits_{j=…
不错的推柿子题 LOJ #2058 题意:求$\sum\limits_{i=0}^n\sum\limits_{j=0}^nS(i,j)·2^j·j!$其中$ S(n,m)$是第二类斯特林数 $ Solution:$ 首先考虑第二类斯特林数的意义:将$ n$个有标号元素放入$ m$个无标号集合(无空集)的方案数 我们枚举空集的数量容斥:$ S(n,m)=\frac{1}{m!}\sum\limits_{k=0}^m(-1)^kC_m^k(m-k)^n$ 乘上$ \frac{1}{m!}$是因为容斥…
题意:给你一个子串,m次询问,每次给你abcd,问你子串sa-b的所有子串和子串sc-d的最长公共前缀是多长 题解:首先要求两个子串的最长公共前缀就是把反过来插入变成最长公共后缀,两个节点在parent树上的lca就是最长公共后缀.找到某个子串就是在parent树上倍增 我们先二分答案,问题就变成了子串sx-y的所有子串中是否包含子串p,我们先倍增找到子串p,然后查询p在parent树上的子树是否包含子串sx-y的子串(parent树上的子树就是所有以p作为后缀的子串,如果sx-y的子串包含p,…
题解 我们冷静一下,先画一棵后缀树 然后发现我们要给c和d这一段区间在[a,b]这一段开头的串里找lcp 而lcp呢,就是c点的祖先的到根的一段,假如这个祖先的子树里有[a,b - dis[u] + 1],那么这个u就是合法的,维护每个点子树里出现过的后缀串起点可以用线段树合并 (这里的深度指后缀树上该点到根的距离) 我们先用min(b - a + 1,c - d + 1)限制一下这个祖先的深度,选择距离根深度最近且深度>= min(b - a + 1,c - d + 1),找的这个点称为p 那…
题解 我并不会做,我觉得很像网络流但是毫无建图思路 我猜了个贪心,写了一下--啥过了90分?!这数据是有多水啊.. 哦又是行列拆点 不过要按照'#'进行拆点,也就是一段横着的区间只能放一个炸弹,一段竖着的区间只能放一个炸弹,如果两个区间的交点是一个空格的话,那么就把这两个区间拆出来的点连边 最后我们只要求一下最大匹配就可以了 代码 #include <bits/stdc++.h> #define enter putchar('\n') #define space putchar(' ') #d…
题解 这个我们处理出来每一位能变化到的最大值和最小值,包括自身 然后我们发现 \(f[i] = max(f[i],f[j] + 1) (mx[j] <= a[i] && a[j] <= mi[i])\) 喜闻乐见的三维偏序转移法 还写树套树??? 直接CDQ分治就好啦 为啥他们的代码就1.xK?????? 我就3.1K 代码 #include <bits/stdc++.h> #define enter putchar('\n') #define space putc…
题解 一写过一交A的水题 只要求一个dfs序,新加一个标记在子树所在的区间上覆盖上该点,维护深度最大的答案 代码 #include <bits/stdc++.h> #define enter putchar('\n') #define space putchar(' ') #define pii pair<int,int> #define fi first #define se second #define MAXN 100005 #define pb push_back #def…
字符串好难啊不会啊 #include <iostream> #include <cstdio> using namespace std; int n, m, rnk[100005], cnt[100005], tmp[100005], p, mx=128, saa[100005], tot, a, b; int height[100005], gg[19][100005], mlg[100005], rot[100005], c, d; char ss[100005]; struc…
推柿子 第二类斯特林数的容斥表达 fft卡精度就用ntt吧qwq. #include <iostream> #include <cstdio> using namespace std; typedef long long ll; int n, lim=1, limcnt, rev[300005], inv[300005], a[300005], b[300005], jie[300005]; const int mod=998244353, gg=3, gi=332748118;…
记横联通是一块横着的没有硬石头的地,把他们编号.竖联通同理. 对于一个空地,将其横联通编号和竖联通编号连边,二分图匹配,最大匹配为答案. #include <iostream> #include <cstring> #include <cstdio> #include <queue> using namespace std; int n, m, hr[55][55], sr[55][55], hcnt, scnt, hea[5005], cnt, yy, t…
当年我还没学cdq的时候在luogu上写过树套树的代码orzzz ref #include <algorithm> #include <iostream> #include <cstdio> using namespace std; int n, m, uu, vv, dp[100005], c[100005]; struct Node{ int val, zxz, zdz, idx; }nd[100005], tmp[100005]; bool cmpzxz(Node…
我们把\(S(i, j)j!\)看成是把\(i\)个球每次选择一些球(不能为空)扔掉,选\(j\)次后把所有球都扔掉的情况数(顺序有关).因此\(S(i, j)j! = i![x^i](e^x - 1)^j\) 为了求出答案,我们需要研究如下的生成函数的性质. \(P(x) = \sum_{i = 0}^{n}(2e^x - 2)^i = \sum_{i = 0}^{n} 2^i \sum_{j = 0}^{i} (-1)^{i - j}e^{jx} {i \choose j} = \sum_{…
「TJOI 2018」教科书般的亵渎 题目描述 小豆喜欢玩游戏,现在他在玩一个游戏遇到这样的场面,每个怪的血量为 \(a_i\) ,且每个怪物血量均不相同, 小豆手里有无限张"亵渎". 亵渎的效果是对所有的怪造成 \(1\) 点伤害,如果有怪死亡,则再次施放该法术.我们认为血量为 \(0\) 的怪物死亡. 小豆使用一张"亵渎"会获得一定的分数,分数计算如下,在使用一张"亵渎"之后,每一个被亵渎造成伤害的怪会产生 \(x^k\) ,其中 \(x\)…
「TJOI 2018」游园会 Party 题目描述 小豆参加了 \(NOI\) 的游园会,会场上每完成一个项目就会获得一个奖章,奖章只会是 \(N, O, I\) 的字样. 在会场上他收集到了 \(K\) 个奖章组成的串.兑奖规则是奖章串和兑奖串的最长公共子序列长度为小豆最后奖励的等级. 现在已知兑奖串长度为 \(N\) ,并且在兑奖串上不会出现连续三个奖章为 NOI ,即奖章中不会出现子串 NOI . 现在小豆想知道各个奖励等级会对应多少个不同的合法兑奖串. \(N \leq 1000, K…
传送门 我们正常的建好Trie后求一遍fail.之后对于每一个节点,从它的fail连向它一条单项边.然后从根节点开始dfs. 记sum[i]代表从根到i号节点所代表的的字符串出现的次数,即该点的权值. 设当前的节点为x,他有一个孩子y,则使sum[x] += sum[y]. 记得记录一下每个字符串结尾的节点编号,设第i个字符串结尾的编号为id[i],对于每个字符串i最后输出sum[id[i]]即可. #include <iostream> #include <cstdio> #in…
「HEOI2016/TJOI2016」排序 题目大意 给定一个 \(1\) 到 \(n\) 的排列,每次可以对这个序列的一个区间进行升序/降序排序,求所有操作后第 \(q\) 个位置上的数字. 题解 大棒子,又学到了许多. 做法很多,这里大概讲一下主流的几种做法. 在线做法 线段树合并&分裂 其实将一个区间升序或降序排序可以看作同一个操作--进行升序排序,打一个是否是升序排序的标记. 所以我们可以在每一个位置维护一棵权值线段树,当要将区间 \([l,r]\) 的数字排序时,取出这些位置所维护的权…
Portal Description 给出一个\(n(n\leq10^5)\)个数的序列\(\{a_n\}\),对该序列进行\(n\)次操作.若在第\(i\)次操作前第\(i\)小的数在\(p_i\)位置,则翻转区间\([i,p_i]\).易知\(n\)次操作后序列会变为升序.求出每一次的\(p_i\). Solution splay. 题里的\(a_i\)是会重复的...所以先离散化一波,相同的数按位置排名.然后根据初始位置建一棵splay,每次将\(i\)旋转到根求左子树大小即可,区间翻转用…
最近 Android 转用 Swift 的传闻甚嚣尘上,Swift 的 Github 主页上已经有了一次 merge>>「Port to Android」,让我们对 Swift 的想象又多了一些空间. 本期 fir.im Weekly 一如往期精选了一些实用的 iOS,Swift,Android 的开发工具和源码分享,欢迎订阅! 个人品牌:如何在 Github 打造你的爆款开源项目 由@Siva海浪高 分享在gaohailang. 当我们在 Github 上抛出自己的开源项目,都希望 Repo…
Loj #2494. 「AHOI / HNOI2018」寻宝游戏 题目描述 某大学每年都会有一次 Mystery Hunt 的活动,玩家需要根据设置的线索解谜,找到宝藏的位置,前一年获胜的队伍可以获得这一年出题的机会. 作为新生的你对这个活动非常感兴趣.你每天都要从西向东经过教学楼一条很长的走廊,这条走廊是如此的长,以至于它被人戏称为 infinite corridor.一次,你经过这条走廊的时,注意到在走廊的墙壁上隐藏着 \(n\) 个等长的二进制的数字,长度均为 \(m\).你从西向东将这些…
Update on 1.5 学了 zhou888 的写法,真是又短又快. 并且空间是 \(O(n)\) 的,速度十分优秀. 题意 LOJ #2538. 「PKUWC 2018」Slay the Spire 题解 首先我们考虑拿到一副牌如何打是最优的,不难发现是将强化牌从大到小能打就打,最后再从大到小打攻击牌 . 为什么呢 ? 证明(简单说明) : 如果不是这样 , 那么我们就是有强化牌没有用 , 且攻击牌超过两张 . 我们考虑把最小的那张攻击牌拿出来 , 然后放入一张强化牌 . \(\becau…
「BZOJ 4289」 PA2012 Tax 题目描述 给出一个 \(N\) 个点 \(M\) 条边的无向图,经过一个点的代价是进入和离开这个点的两条边的边权的较大值,求从起点 \(1\) 到点 \(N\) 的最小代价.起点的代价是离开起点的边的边权,终点的代价是进入终点的边的边权 \(N \leq 10^5, M \leq 2 \times 10^5\) 解题思路 : 首先考虑一个暴力的做法,建一个新图,把每一条边看成新图的一个点' 对于原图的每一个点 \(u\) 对于边 \((u, x),…
「GXOI / GZOI2019」简要题解 LOJ#3083. 「GXOI / GZOI2019」与或和 https://loj.ac/problem/3083 题意:求一个矩阵的所有子矩阵的与和 和 或和. 分析: 或和与是一个东西,只要把所有数都异或上\((1<<31)-1\)然后再从总答案中减掉就能互相转化,考虑求与. 枚举每一位,转化成算有多少个全\(1\)子矩形,单调栈经典问题.总时间复杂度\(\mathrm{O}(n^2\log n)\). 代码: #include <cst…
[LOJ 2022]「AHOI / HNOI2017」队长快跑 链接 链接 题解 不难看出,除了影响到起点和终点的射线以外,射线的角度没有意义,因为如果一定要从该射线的射出一侧过去,必然会撞到射线 因此,我们可以把射线的方向规约成两类,分成向上与向下的两种. 不难发现,改变射线的方向后,原有的限制条件并未被改变. 要判断一条线是否规约为"垂直向下",只需判断它的关于P的极角是否在S和T关于P的极角之间. 将所有射线按端点的横坐标排序,依次计算每个端点到S的最短路径上,距离它最近的点nx…